我在Docker/Fig环境中看到一个奇怪的问题.我的假设是,这是因为容器的装载量有所延迟,但我不确定如何确认.
我有一个包含以下内容的容器:
FROM busybox
MAINTAINER Dan Rumney <email>
ADD loadsnapshot.sh /loadsnapshot.sh
RUN ["chmod", "u+x", "/loadsnapshot.sh"]
VOLUME ["/snapshot"]
ENTRYPOINT ["/loadsnapshot.sh"]
Run Code Online (Sandbox Code Playgroud)
#!/bin/sh
if [ "$( ls -A /snapshot)" ]; then
echo "Loading snapshot..."
# Do stuff
else
echo "No snapshot to load"
fi
Run Code Online (Sandbox Code Playgroud)
在我的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/"
Run Code Online (Sandbox Code Playgroud)
这里的目标(可能很明显)是启动数据容器(pdsvol),然后使用我的机器上运行的一些数据填充它.pdsvol然后由一堆其他容器共享.
我这样做就是打电话
fig up pdsvol
Run Code Online (Sandbox Code Playgroud)
然后
fig run --rm loader
Run Code Online (Sandbox Code Playgroud)
我期待看到的是
builder@beast:/opt/docker-vm$ fig run --rm loader
Loading snapshot...
... stuff ...
Removing dockervm_loader_run_1...
Run Code Online (Sandbox Code Playgroud)
而且,有时候我会这样做.但是,有时我看到:
builder@beast:/opt/docker-vm$ fig run --rm loader
No snapshot to load
Removing dockervm_loader_run_1...
Run Code Online (Sandbox Code Playgroud)
我可以fig run --rm loader一遍又一遍地跑,我会得到两个结果中的一个.
我的工作理论是,安装卷有一些延迟,有时它会在ENTRYPOINT脚本运行之前发生,有时也会发生.但是,如果我跑:
docker run --rm -v /opt/snapshots/my-data/:/snapshot/ busybox ls -A /snapshot
Run Code Online (Sandbox Code Playgroud)
我一直看到我期待的文件......所以这违背了这个理论.
我知道我可以破解loadsnapshot.sh并延迟,看看这是否有所帮助,但我宁愿了解正在发生的事情,而不是克服修复.
有没有人有任何想法在这里发生了什么?
BTW:主机系统是Linux,所以我们在这里使用本机容器.
我尝试在顶部放置2秒延迟loadsnapshot.sh,但它没有帮助.
我添加了一些日志记录到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
}
Run Code Online (Sandbox Code Playgroud)
小智 1
我可以使用 Docker 1.4.0/Fig 1.0.1 重现该问题。
回滚到Docker 1.3.1解决了我的问题。
这似乎仍然是一个影响许多人的悬而未决的问题。
虽然#443已关闭,但仍有相关的未解决问题:
| 归档时间: |
|
| 查看次数: |
2252 次 |
| 最近记录: |