簡単fig up
に言うと、2 つのコンテナーを適切にリンクしない場合docker run
です。
シナリオ:
2 つのコンテナーがあります。1 つは Cassandra を含み、もう 1 つはクライアント サービスを含みます。コンテナが起動すると、クライアントはcassandra
hosts ファイルにホスト名があり、9042 ポートに到達できることを期待します。
タイトなコンテナーへのドッカーのリンクを一緒に使用します。ここにあるfig.yml
:
cassandra:
image: "myrepo/cassandra"
ports:
- "7199:7199"
- "9042:9042"
- "9160:9160"
- "61621:61621"
- "2222:22"
hostname: cassandra
client:
image: myrepo/client
links:
- cassandra
ports:
- "8098:8098"
- "8099:8099"
hostname: client
するとfig up client
、fig は cassandra を起動しますが、クライアントは cassandra コンテナーに到達できません (ping は実行できますが、9042 ポートには到達できません)。
ただし、cassandra を起動しfig up cassandra
て実行すると、次のようになります。
docker run --link tramm_cassandra_1:cassandra --link tramm_cassandra_1:cassandra_1 --link tramm_cassandra_1:tramm_cassandra_1 -p 8098:8098 -p 8099:8099 myrepo/client
その後、クライアントは問題なく cassandra と通信できます。
コンテナーを検査しましたが、出力は次のとおりです。
- cassandra inspect
- fig up client inspect
- docker run client inspect
私が見つけることができる唯一の違いはHostConfig -> Devices
とHostConfig -> LxcConf
です。fig-up バージョンではnull
、docker-run バージョンでは - と同じ[]
です。
「ネイティブ」ドッカーシナリオでは機能し、図では機能しない理由とfig up
の違いを誰かが説明できますか。docker run