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

时间:2015-01-02 19:43:33

标签: docker lsof fig dockerfile

我启动了多个链接容器。所有容器将主目录/ var / log / tipsi /挂载到同一个被调用的内部目录。问题我只在最后一个容器中看到/ var / log / tipsi中的文件:

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

    我使用无花果启动容器。这是使用的配置:

    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参数,没有任何运气。有没有想过这些文件的原因?

1 个答案:

答案 0 :(得分:3)

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

如果您在某个时刻将VOLUME添加到Dockerfile,则在重新创建时会继续获取该卷的内容。

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