PostgresためDockerfileを見ると、あなたはそれがボリューム命令を宣言することを参照してください。
毎回あなたが--volume
オプションを指定せずに、新しいPostgresのコンテナを実行するには、ドッキングウィンドウは自動的に新しいボリュームを作成します。ボリュームにはランダムな名前が付けられます。
は、コマンドを実行して、すべてのボリュームを見ることができます:
docker volume ls
ます。また、使用してホストのパスを検査することで、ボリュームによってホストに保存されたファイルを検査することができます
docker volume inspect <volume-name>
ので、 runコマンドに--volume
オプションを指定しないと、DockerはDockerfileで宣言されたすべてのボリュームのボリュームを作成します。これは主に、ボリュームに名前を付けるのを忘れて、データが失われないようにすると安全です。
まず:コンテナ取得の更新または は、同じデータではなく 以前に作成した匿名のボリュームへの参照を失うことに 参照新しいコンテナ内からのPostgresデータベースを再作成した場合にどのように私は、確認してください。
ドッカーに同じボリュームを使用させたい場合は、--volume
オプションを指定する必要があります。指定されると、ドッカーは新しいボリュームを作成せず、dockerコマンドで既存のボリュームを指定されたフォルダにマウントするだけです。
貴重なデータを持つボリュームの名前を付けることをお勧めします。たとえば:このコマンドを初めて実行する場合
docker run --volume postgresData:/var/lib/postgresql/data ...
ボリュームpostgresData
は、ホスト上で作成し、意志のバックアップ/var/lib/postgresql/data
されます。 2回目に実行すると、ホスト上にバックアップされた同じデータがコンテナにマウントされます。
第二:YMLファイルを使用してこの作業を行いますか?そのようなデータベースコンテナの複数のレプリカを のボリュームに参照することは可能ですか?
はい、ボリュームは複数のコンテナ間で共有することができます。同じボリュームを複数のコンテナにマウントすることができ、コンテナは同じファイルを使用します。ドッカーのコンは、あなたがそれを行うことができます...
はしかし、ホストに限定されるとボリュームが、彼らが作成されたたことbeaware。複数のマシン上でコンテナを実行する場合、すべてのマシンからボリュームにアクセスできる必要があります。 を達成する方法やツールがありますが、それは少し複雑です。これはDockerで解決されなければならない限界です。
感謝はあなたの偉大な答えをyamenk。私は後者の方法で行きたいです。しかし、ymlファイルを使用してコンテナを実行する場合、名前付きボリュームを宣言するオプションはありません。 'docker stack deploy -c docker-compose.yml postgres'を実行すると、名前付きボリュームを持つことを宣言する必要がありますか? – Chris
@Chris https://docs.docker.com/compose/compose-file/#short-syntax-3で指定された名前付きデータボリュームを指定することができます。 'postgresData:/ var/lib/postgresql/data' – yamenk