2017-10-31 12 views
0

Docker開発環境の初心者です。私のJHipster Docker環境では、Dockerイメージを起動すると、 "relation"というエラーが発生しました。このエラーは、DBスキーマが変更された後に発生します。以下はdocker-compose.ymlファイルです:DockerでのDB管理

version: '2' 
services: 
    foo-app: 
     image: foo 
     environment: 
      - SPRING_PROFILES_ACTIVE=prod,swagger 
      - SPRING_DATASOURCE_URL=jdbc:postgresql://foo-postgresql:5432/foo 
      - JHIPSTER_SLEEP=10 # gives time for the database to boot before the applicationelasticsearch:9300 
     ports: 
      - 8080:8080 
    foo-postgresql: 
     extends: 
      file: foo.yml 
      service: foo-postgresql 

そしてfoo.ymlファイルは以下の通りです:

version: '2' 
services: 
    foo-postgresql: 
     image: postgres:9.6.5 
     # volumes: 
     #  - ~/volumes/jhipster/foo/postgresql/:/var/lib/postgresql/data/ 
     environment: 
      - POSTGRES_USER=foo 
      - POSTGRES_PASSWORD= 
     ports: 
      - 5432:5432 

この時点でアプリケーションが起動していないとDBであるため、私は、DBのテーブルを削除することができます。しかし、私はそれをDB管理の正しいアプローチとは見なしません。私はまた、コマンド

psql -h 127.0.0.1 -p 5432 -U postgres 

ドッカーでDBを管理するための正しい方法は何でDBにアクセスすることはできません、しかし、コマンド

docker run -i -t '<DB image name>' /bin/bash 

IとDBのイメージを持ち出すことができますか?

答えて

0

あなたが直面している同じ問題のため正直言って私はクラウドDBサービス(AWS RDS)を使ってDB用のドッキング用のコンテナをホストしませんでした。これらの環境はスケーラビリティが必要ないため、私は引き続きローカル/ qa環境用のDocker DBコンテナを使用しています。

devの場合、私はdocker-compose.ymlファイルに両方のサービス(app/db)を投げ、bashスクリプトを使ってそれを蹴飛ばします。スクリプトでは、dbが起動し準備が整ったことを確認するためにsleepコマンドをいくつか入れてから、そのあとappを起動します。私はmysqlコンテナを使用しています、そして、通常40秒は、mysqlサービスが確実にアップするのに十分な時間です。生産準備状況ではありませんが、私のdbコンテナが稼働しているかどうかを調べるための素晴らしいソリューションは得られませんでした。

RDSを使用している本番環境またはHA環境では、データベースは常に使用できるため、新しいドッカーコンテナがクラスタに追加されると、依存するDBコンテナも待機しません。ここで

は、サービスを開始し、待つためのスクリプトです:

#!/bin/bash 

## Use environment variable set in the .env file. 
source ./.env 

###Name the container and launch, Check docker-compose.yml #### 
echo "Starting Docker containers ..." 
CONTAINER=${CONTAINER_NAME} 
docker-compose up -d 

sleep 20 
echo "..." 
sleep 20 

Continue with my app setup... 
関連する問題