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
、2 つの結果のうちの 1 つを得ることができます。
私の作業理論では、ボリュームのマウントに多少の遅延があり、ENTRYPOINT
スクリプトが実行される前に発生することもあれば、実行後に発生することもあります。ただし、実行すると:
docker run --rm -v /opt/snapshots/my-data/:/snapshot/ busybox ls -A /snapshot
私は期待しているファイルを一貫して見ています...したがって、これはその理論に反します。
ハッキングしloadsnapshot.sh
て遅延を入れて、それが役立つかどうかを確認できることはわかっていますが、修正を怠るよりも、何が起こっているのかを理解したい.
ここで何が起こっているのか、誰にも考えがありますか?
ところで: ホスト システムは Linux なので、ここではネイティブ コンテナーを使用しています。
アップデート
の先頭に 2 秒の遅延を入れてみましたloadsnapshot.sh
が、効果はありませんでした。
更新 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
}