いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

コンテナが属するネットワークを動的に変更する (docker network connect/disconnect)

概要

f:id:gsf_zero1:20211029114204p:plain

よく忘れるので、ここにメモメモ。。。

コンテナを起動する際に --network xxxx と指定して望みのネットワークに所属させることはよくあります。

で、たまに動いている最中でもネットワークを移動させたいときもよくあります。

docker network connect/disconnect を使うと、コンテナが起動している最中でもネットワークを変更できるので、知っておくと便利です。

サンプル

毎回コマンド打つのが面倒なので、Makefile用意しました。

CONTAINER_NAME := container-01
NETWORK_NAME   := network-conn-disconn-01
NETWORK_SUBNET := 192.168.149.0/24
NETWORK_FILTER := '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'

run: \
   _create_network \
   _start_container \
   _inspect_container_01 \
   _disconnect_from_bridge_network \
   _connect_another_network \
   _inspect_container_02 \
   _cleanup

_create_network:
   @echo '>>> Create docker network'
  docker network create --subnet $(NETWORK_SUBNET) $(NETWORK_NAME)
   @echo ''

_start_container:
   @echo '>>> Start container within docker host network'
  docker container run -dit --init --rm --name $(CONTAINER_NAME) --stop-signal SIGKILL busybox
   @echo ''

_inspect_container_01:
   @echo '>>> Inspect container network'
  docker container inspect --format=$(NETWORK_FILTER) $(CONTAINER_NAME)
   @echo ''

_disconnect_from_bridge_network:
   @echo '>>> Disconnect container from docker network'
  docker network disconnect bridge $(CONTAINER_NAME)
   @echo ''

_connect_another_network:
   @echo '>>> Connect container to docker network'
  docker network connect $(NETWORK_NAME) $(CONTAINER_NAME)
   @echo ''

_inspect_container_02:
   @echo '>>> Inspect container network'
  docker container inspect --format=$(NETWORK_FILTER) $(CONTAINER_NAME)
   @echo ''

_cleanup:
   @echo '>>> Cleanup'
  docker container stop $(CONTAINER_NAME) 2>&1 > /dev/null
  docker network rm $(NETWORK_NAME) 2>&1 > /dev/null
   @echo ''

実行すると以下のようになります。

gitpod /workspace/try-docker/network_connect_disconnect $ make

>>> Create docker network
docker network create --subnet 192.168.149.0/24 network-conn-disconn-01
61ccfc5858487f70c978d0f09e0f4addd90110b0a5bd71ca59b37e153a603c00

>>> Start container within docker host network
docker container run -dit --init --rm --name container-01 --stop-signal SIGKILL busybox
d0c01a088b4580eb677d49e25ea66ab717a6caf735e08d57e10ecab4c6288165

>>> Inspect container network
docker container inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container-01
172.17.0.2

>>> Disconnect container from docker network
docker network disconnect bridge container-01

>>> Connect container to docker network
docker network connect network-conn-disconn-01 container-01

>>> Inspect container network
docker container inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container-01
192.168.149.2

>>> Cleanup
docker container stop container-01 2>&1 > /dev/null
docker network rm network-conn-disconn-01 2>&1 > /dev/null

以下にサンプルをアップしていますので、よろしければご参考まで。

github.com

参考情報


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com