3

docker-composeのイメージを使用するファイルにメイン サービスがpostgresあり、データベースに正常に接続しているように見えますが、書き込んでいるデータはコンテナーの有効期間を超えて保持されていません (私がしたことはこのチュートリアルに基づいています)。

これが私のdocker-composeファイルです:

main:
  build: .
  volumes:
    - .:/code
  links:
    - postgresdb
  command: python manage.py insert_into_database
  environment:
    - DEBUG=true


postgresdb:
  build: utils/sql/
  volumes_from:
    - postgresdbdata
  ports:
    - "5432"
  environment:
    - DEBUG=true


postgresdbdata:
  build: utils/sql/
  volumes:
    - /var/lib/postgresql
  command: true
  environment:
    - DEBUG=true

postgresdbとサービスに使用している Dockerfile は次のとおりですpostgresdbdata(これにより、基本的にデータベースが作成され、ユーザーが追加されます)。

FROM postgres

ADD make-db.sh /docker-entrypoint-initdb.d/

サービスの実行が終了した後もデータを保持して、将来使用できるようにするにはどうすればよいですかmain( のようなものを呼び出す場合などpython manage.py retrieve_from_database)。/var/lib/postgresql適切なディレクトリでさえあり、boot2docker明らかに制限されていることを考えると、それにアクセスできます/Users/か?

ありがとうございました!

4

1 に答える 1

6

問題は、Compose が再起動するたびにコンテナーの新しいバージョンを作成するため、古いコンテナーとそのデータが失われることです。postgresdbdata

二次的な問題は、データ コンテナーが実際に実行されていないことです。データ コンテナーは、実際には でインポートできるボリュームの名前空間にすぎず、--volumes-from停止したコンテナーでも機能します。

当面の最善の解決策はpostgresdbdata、Compose 構成からコンテナーを削除することです。次のようにします。

$ docker run --name postgresdbdata postgresdb echo "Postgres data container"
Postgres data container

echo コマンドが実行され、コンテナーが終了しますが、実行しない限り、コンテナーdocker rmを参照することができ--volumes-from、Compose アプリケーションは正常に動作するはずです。

于 2015-04-24T17:57:56.597 に答える