docker - 挂载到主机目录的 docker 卷仅包含最后一个容器中的文件

标签 docker lsof fig dockerfile

我正在启动多个链接的容器。所有容器都将主机目录/var/log/tipsi/挂载到同一个称为内部目录。我仅在最后一个容器中看到/var/log/tipsi 中的文件的问题:

  1. tipsi_solr 和tipsi_erl 具有相同的文件集
  2. tipsi_web 容器(最后启动的容器)看不到上面的文件,只能看到它自己的文件
  3. 主机目录仅包含来自 #2 (tipsi_web) 的文件

我正在使用图启动容器。这是使用的配置:

solr:
    build: ../tipsi_solr/
    volumes:
     - /var/log/tipsi:/var/log/tipsi
     - /home/docker/code/tipsi/solr/collection1/data

erl:
    build: ../tipsi_erl/
    volumes:
     - /var/log/tipsi:/var/log/tipsi

web:
   build: .
   volumes:
     - /var/log/tipsi:/var/log/tipsi
     - /etc/cert:/etc/cert

   ports:
     - "443:443"
     - "80:80"

   links:
     - solr:tipsi-solr.local
     - erl:tipsi-erl.local

有趣的事情 - lsof 显示 Tipsi_erl pid 的缺失文件(在主机上启动):

prompt:~$ sudo lsof -p 12717
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
beam.smp 12717 root   12w   REG  252,0        0 9323763 /var/log/tipsi/stacked_cache_error.log
beam.smp 12717 root   13w   REG  252,0   739192 9323765 /var/log/tipsi/stacked_cache_debug.log

但它们无法通过其他应用程序访问:

ls /var/log/tipsi/stacked_cache_debug.log                                                                                                             22:35:29
ls: cannot access /var/log/tipsi/stacked_cache_debug.log: No such file or directory

此外,我尝试在 Dockerfile 中为所有容器指定和删除 VOLUME 参数,但没有任何运气。知道为什么这些文件没有显示吗?

最佳答案

我相信你正在点击https://github.com/docker/fig/issues/447

如果您曾经将 VOLUME 添加到 Dockerfile,则在重新创建时会不断获取该卷的内容。

您应该fig rm --force 清除旧容器,之后它应该开始工作并使用主机卷。

关于docker - 挂载到主机目录的 docker 卷仅包含最后一个容器中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27747669/

相关文章:

python - 从已卸载的wheel生成requirements.txt

docker - docker run --init 的 docker-compose 等价物是什么?

swift - 获取进程的所有打开文件导致 errno 12 = Out of Memory

docker - 使用docker定义和运行复杂应用程序的工具

playframework - 在没有伪 TTY 的情况下保持 Play 框架应用在 Docker 容器中运行

c# - 如何在 docker 容器中的rider/visual studio 中运行测试

rest - 如何通过构建函数将GitHub的URL传递给Docker的REST API远程参数

java - Spring RmiExporter服务启动成功后失败

linux - LSOF 连接已建立

docker-compose:为多个服务使用多个 Dockerfile