使用 Fig 时,为什么我的卷有时无法安装到 Docker 容器中?

2024-05-06

我在 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"]

加载快照.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

and then

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一遍又一遍,我会得到两个结果之一。

我的工作理论是,安装卷时存在一些延迟,有时它发生在安装之前ENTRYPOINT脚本会运行,有时会在之后运行。但是,如果我运行:

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

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

我知道我可以破解loadsnapshot.sh并延迟一下,看看是否有帮助,但我宁愿了解发生了什么,也不愿拼凑解决方案。

有人知道这里发生了什么吗?

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

Update

我尝试在顶部添加 2 秒延迟loadsnapshot.sh,但这并没有帮助。

Update 2

我向Fig 添加了一些日志记录以转储用于创建容器的配置,并且在每个实例中(失败或失败),它都是相同的:

{
 '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/Fig 1.0.1 重现该问题。

回滚到码头工人1.3.1为我解决了这个问题。

这似乎仍然是一个影响许多人的悬而未决的问题。

虽然#443 https://github.com/docker/fig/issues/443已关闭,还有相关的未解决问题:

  • 问题 #622:由于 docker 1.3.0/fig 1.0.0 在配置现有容器时未安装卷 https://github.com/docker/fig/issues/622
  • 问题#723:docker 1.4.0 的文件卷已损坏 https://github.com/docker/fig/issues/723
  • 问题 #443:本地目录周期性挂载失败。 https://github.com/docker/fig/issues/443
  • 请求请求 #711:修复重新创建时的卷#711 https://github.com/docker/fig/pull/711
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Fig 时,为什么我的卷有时无法安装到 Docker 容器中? 的相关文章

随机推荐