概要
よく忘れるので、ここにメモメモ。。。
コンテナを起動する際に --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
以下にサンプルをアップしていますので、よろしければご参考まで。
参考情報
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場