簡単fig upに言うと、2 つのコンテナーを適切にリンクしない場合docker runです。
シナリオ:
2 つのコンテナーがあります。1 つは Cassandra を含み、もう 1 つはクライアント サービスを含みます。コンテナが起動すると、クライアントはcassandrahosts ファイルにホスト名があり、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