docker内部から外部ネットワークへの通信が発生することが望ましくないケースがあるときに使う備忘メモ
最初からネットワーク遮断する場合
最初からネットワーク遮断する場合はdocker起動時に--network=none
オプションを付ける方法が良いと思われる
--network=noneオプションを付ける
$ docker run -it --network=none ubuntu:18.04
## 上記の後、apt updateは失敗する(意図通り、外部ネットワークへ接続できないようにできている)
$ apt update -y
Err:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
Temporary failure resolving 'security.ubuntu.com'
...
W: Some index files failed to download. They have been ignored, or old ones used instead.
--network=noneオプションを付けない
$ docker run -it ubuntu:18.04
## 上記の後、apt updateは成功する
$ apt update -y
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
...
Fetched 24.0 MB in 7s (3525 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
途中からネットワーク遮断する場合
途中からネットワーク遮断する場合はdocker network disconnect
を使う方法が良いと思われる
例
docker network disconnect bridge ${CONTAINER_NAME}
# 普通に起動させると apt update -y が成功する
$ docker run -it --name ubuntu ubuntu:18.04 cat &
$ docker exec -it ubuntu bash
$ apt update -y
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
...
Fetched 24.0 MB in 7s (3525 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
# docker network disconnect すると、意図通り、外部ネットワークへ接続できないようになる
$ exit
$ docker network disconnect bridge ubuntu
$ docker exec -it ubuntu bash
$ apt update -y
Err:1 http://security.ubuntu.com/ubuntu bionic-security InRelease
Temporary failure resolving 'security.ubuntu.com'
...
W: Some index files failed to download. They have been ignored, or old ones used instead.
尚、ネットワークに繋げるにはdocker network connect
を使う
例
docker network connect bridge ${CONTAINER_NAME}
参考
ネットワークから遮断したDockerコンテナを立ち上げたい
Docker network 概論
docker network disconnectコマンドの使い方(実例付)
コンテナのネットワーク
コンテナを切断(disconnect)し、ネットワークからコンテナを取り外せます。切断にはネットワーク名とコンテナ名を指定します。あるいは、コンテナ ID も使えます。この例では、名前を指定する方が速いです。
$ docker network disconnect bridge networktest