5

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
}
4

1 に答える 1