为什么在使用无花果的时候,我的卷有时不能装入我的Docker容器中?

我在Docker / Fig环境中看到一个奇怪的问题。 我的假设是,这是由于延迟容器的容量,但我不知道如何确认。

我有一个容器与以下内容:

Dockerfile

FROM busybox MAINTAINER Dan Rumney <email> ADD loadsnapshot.sh /loadsnapshot.sh RUN ["chmod", "u+x", "/loadsnapshot.sh"] VOLUME ["/snapshot"] ENTRYPOINT ["/loadsnapshot.sh"] 

loadsnapshot.sh

 #!/bin/sh if [ "$( ls -A /snapshot)" ]; then echo "Loading snapshot..." # Do stuff else echo "No snapshot to load" fi 

在我的fig.yml文件中,我有:

 pdsvol: image: busybox volumes: - "/opt/alfresco/alf_data" - "/data" - "/mysqlbackup" - "/ldapbackup" loader: image: "docker.myregistry.com/snapshot.loader:3.5.0" volumes_from: - pdsvol volumes: - "/opt/snapshots/my-data/:/snapshot/" 

这里的目标(可能很明显)是启动一个数据容器( pdsvol ),然后用我的机器上运行的一些数据填充它。 然后pdsvol被一堆其他容器共享。

我运行的方式是打电话

 fig up pdsvol 

接着

 fig run --rm loader 

我期望看到的是

 builder@beast:/opt/docker-vm$ fig run --rm loader Loading snapshot... ... stuff ... Removing dockervm_loader_run_1... 

有时候我也是 但是,有时我看到:

 builder@beast:/opt/docker-vm$ fig run --rm loader No snapshot to load Removing dockervm_loader_run_1... 

我可以fig run --rm loader运行fig run --rm loader ,我会得到两个结果之一。

我的工作理论是在安装音量方面有一些延迟,有时会在运行ENTRYPOINT脚本之前发生,有时甚至会发生。 但是,如果我运行:

  docker run --rm -v /opt/snapshots/my-data/:/snapshot/ busybox ls -A /snapshot 

我一直看到我期待的文件…所以这违背了这个理论。

我知道我可以在loadsnapshot.sh破解,并延迟一段时间,看看是否有帮助,但我宁愿理解比修复一个更糟糕的事情。

有没有人有任何想法这里发生了什么?

顺便说一句:主机系统是Linux,所以我们在这里使用本地容器。

更新

我试着在loadsnapshot.sh的顶部放置一个2s的延迟,但是没有帮助。

更新2

我添加了一些日志到fig来转储用于创build容器的configuration,并且在每个实例(失败或不)中都是一样的:

 { 'Env': None, 'Hostname': None, 'Entrypoint': None, 'Dns': None, 'Memory': 0, 'OpenStdin': True, 'User': None, 'CpuShares': None, 'AttachStdout': True, 'NetworkDisabled': False, 'WorkingDir': None, 'Cmd': None, 'StdinOnce': True, 'AttachStdin': True, 'Volumes': {u'/snapshot/': {}}, 'MemorySwap': 0, 'VolumesFrom': None, 'Tty': True, 'AttachStderr': True, 'Domainname': None, 'Image': 'docker.myregistry.com/snapshot.loader:3.5.0', 'ExposedPorts': None } 

我可以重现与Docker 1.4.0 /图1.0.1的问题。

回滚到Docker 1.3.1为我解决了这个问题。

它似乎仍然是一个影响许多人的公开问题。

虽然#443已经closures,但还是有相关的问题:

  • 问题#622 :由于docker 1.3.0 / fig 1.0.0在查找现有容器时没有安装
  • 问题#723 :Docker 1.4.0的文件卷被损坏
  • 问题#443 :本地目录定期无法安装。
  • 拉请求#711 :修复重build#711上的卷