我基于相同的官方postgres图像创建了两个不同的自定义图像 . 两者的Dockerfile看起来像:

FROM postgres:latest

LABEL vendor="***" \
      vendor.website="***" \
      description="The postgres database"

COPY init.sh /docker-entrypoint-initdb.d/

这些图像用于不同的docker-compose.yml文件中 . 问题是基于这些映像的容器安装了相同的卷,最终我为不同的应用程序提供了相同的数据库 . 我以为docker会为不同的容器创建单独的卷 . 我究竟做错了什么?

码头检查信息:

  • 容器1:

“ID”: “b6ce892e88e08b410af2603041789641cdfe9648e5c36d66d0cff8c495de2720”, “形象”: “SHA256:4c6ac32f355cdc93251256cc8e8171fc02bb85d719f4efb9ac6bb999ad66b3ab” ...... “坐骑”:[{ “类型”: “音量”, “姓名”: “5bb91515eb853e0c18e396b041058d4a03424dfb45c3eb2d2b9890e0b044b461”, “源代码”:“/ VAR / lib / docker / volumes / 5bb91515eb853e0c18e396b041058d4a03424dfb45c3eb2d2b9890e0b044b461 / _data“,”Destination“:”/ var / lib / postgresql / data“,”Driver“:”local“,”Mode“:”rw“,”RW“:true,”传播“:”“}],

  • 容器2

“ID”: “8c1c9891c462d8520ab107901c39b62fbef389e4501979065a6edb218a25c16a”, “形象”: “SHA256:4c6ac32f355cdc93251256cc8e8171fc02bb85d719f4efb9ac6bb999ad66b3ab” ...... “坐骑”:[{ “类型”: “音量”, “姓名”: “5bb91515eb853e0c18e396b041058d4a03424dfb45c3eb2d2b9890e0b044b461”, “源代码”:“/ VAR / lib / docker / volumes / 5bb91515eb853e0c18e396b041058d4a03424dfb45c3eb2d2b9890e0b044b461 / _data“,”Destination“:”/ var / lib / postgresql / data“,”Driver“:”local“,”Mode“:”rw“,”RW“:true,”传播“:”“}],

因此,您可以看到基于不同图像的容器( 4c6ac32f355cdc93251256cc8e8171fc02bb85d719f4efb9ac6bb999ad66b3ab4c6ac32f355cdc93251256cc8e8171fc02bb85d719f4efb9ac6bb999ad66b3ab )使用相同的卷 5bb91515eb853e0c18e396b041058d4a03424dfb45c3eb2d2b9890e0b044b461 . 我显然需要他们使用单独的卷 .

UPDATE 1

我做了以下事情:

  • 为图像添加了不同的标签,使其哈希值不同

  • 删除了"shared"卷 . 我的意思是两个容器都拿起来的那个

  • 启动了docker - 依次组成两个应用程序(没有docker-compose down) . 他们再次分享了音量 .

UPDATE 2

  • 我删除了计算机上的所有卷和图像,并为两个应用程序重建了图像

  • 已执行的泊坞窗组成

  • 已执行的泊坞窗 - 依次组合两者(在切换应用时使用泊坞窗组合)

  • 他们不再共享一个卷 . 两个自定义postgres容器都使用自己的卷 .

我糊涂了 . 当不同的容器共享一个卷,以及如何避免它?