🐳

Dockerで別のコンテナのネットワークスタックを共有する

2021/09/23に公開

概要

docker inspectの出力を眺めていたら"NetworkMode": "container:47bc56571a88..."[1]となっているコンテナがあり疑問に思ったのでdocker runのリファレンスを見てみるとNetwork: containerというセクションに説明が書かれていました。

docker runするとき--network container:<コンテナIDまたは名前>とすると、そのコンテナのネットワークスタックを共有するそうです。

手元で簡単に試してみます。

環境

使用しているDockerのバージョンは次の通りです。

$ docker --version
Docker version 20.10.8, build 3967b7d

動作確認

まずネットワークスタックを共有するコンテナを用意します。

$ docker run -d --name share --network none busybox tail -f /dev/null
ced60c35af7a7e57136814915c12670763c19e35e1498deb7a81b2383359698e

次にNginxを用意します。
--networkshareコンテナを設定しています。

$ docker run -d --name web --network container:share nginx
645d785bbba1f917d8e42d138da874bb8fe8b3ee30e8528250ff86adcbb447b3

最後にもう1つコンテナを立ててlocalhost:80へのHTTPリクエストが通ることを確認します。

$ docker run --rm --network container:share curlimages/curl \                          
> curl -s --head localhost:80
HTTP/1.1 200 OK
Server: nginx/1.19.9
Date: Thu, 23 Sep 2021 07:56:03 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 30 Mar 2021 14:47:11 GMT
Connection: keep-alive
ETag: "606339ef-264"
Accept-Ranges: bytes

Nginxへ接続できていますね。

動作確認ができたので後始末しておきます。

$ docker rm -f web share
web
share

以上です。

脚注
  1. ハッシュ値が長いため...と表現して省略しています。 ↩︎

Discussion