2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Dockerで作成したNetwork Namespaceへアタッチする方法

Last updated at Posted at 2020-04-11

Dockerのネットワーク周りのトラシューをする時、
docker execでコンテナ内に入ってしまうとデバッグ用のコマンドが使えないことがあって不便なものです。

そんな時はNetwork Namespaceを切り替えることで、ホスト側のコマンド全て使える状態で対象のDockerコンテナのネットワーク環境で作業できて便利です。以下にその方法を記します。

Dockerのデフォルト・ネットワーク(bridge)では、コンテナを作成するたびにNetwork Namespaceが作成されます。
Network Namespaceの一覧は以下コマンドで取得できます。

$ sudo ip netns ls

このコマンドで対象のNamespaceを確認して、切り替えて...
と行きたいところですが、もう1ステップ必要です。

ip netns は/var/run/netns 配下のファイルを一覧表示する実装になっていますが、
Docker経由でNetwork Namespaceを作成した場合はこのディレクトリ配下にファイルが作成されません(というかこのディレクトリ自体作られません)。
そのためまず以下手順を実行する必要があります。

$ sudo mkdir /var/run/netns
$ pid=$(docker inspect $CONTAINER_ID --format '{{.State.Pid}}’)
$ sudo ln -s /proc/${pid}/ns/net /var/run/netns/[任意のファイル名]

以下、実際の利用例になります。

[ec2-user@dockerHost ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
71de02f377ed        busybox             "sh"                45 minutes ago      Up 45 minutes                           c1
[ec2-user@dockerHost ~]$ ip netns list
[ec2-user@dockerHost ~]$ 
[ec2-user@dockerHost ~]$ CONTAINER_ID=71de02f377ed
[ec2-user@dockerHost ~]$ pid=$(docker inspect ${CONTAINER_ID} --format '{{.State.Pid}}')
[ec2-user@dockerHost ~]$ sudo mkdir /var/run/netns
[ec2-user@dockerHost ~]$ sudo ln -s /proc/${pid}/ns/net /var/run/netns/tmp-container-ns
[ec2-user@dockerHost ~]$ sudo ip netns ls
tmp-container-ns (id: 0)
[ec2-user@dockerHost ~]$ sudo ip netns exec tmp-container-ns bash
[root@dockerHost ec2-user]# 
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?