ipconfig
やping
は、Windowsのコマンドラインツールです。もし、コンテナがLinuxベースのものである場合(そしてそれがほとんどの場合です)、それらのツールはそのままでは使用できません。
以下の手順で導入することで、Linuxコンテナで似たような操作を行うことができるようになります。
※これらのコマンドを実行する前に、コンテナがDebianベースのものであるかどうか、または他のLinuxディストリビューションであるかどうかを確認してください。それに応じて、適切なパッケージ管理ツール(例:apt
, yum
, zypper
など)を使用してコマンドを実行します。
※Anacondaの公式Dockerイメージは、DebianベースのLinuxを使用しています。そして、Docker Desktop for WindowsがWSL 2と統合されることが増えてきましたので、Ubuntuとの関連があるかもしれませんが、実際のコンテナイメージはDebianベースである点は変わりません。
したがって、今回の場合には、以降のコマンド(apt等)を使用します。
1.Dockerコンテナへの接続
Docker Desktop上のコンテナ内でこれらのコマンドを実行する場合、まずコンテナにアタッチするか、docker exec
を使用してコマンドを実行する必要があります。
・docker exec -it [コンテナIDまたはコンテナ名] /bin/bash
これにより、コンテナ内のシェルに入ることができます。
そこで上記のapt
コマンドを実行して必要なツールをインストールできます。
以下は順に主要なNW命令(ip、ifconfig、ping、nslookup)導入・実行(実行結果)の記録です。
2.ip
(1)導入
・apt update
・apt install -y iproute2
※&&で繋ぎ、apt update && apt install -y iproute2の様に実行しても良い。
実例:
apt update
apt install -y iproute2
(2)実行
・ip a
(base) root@7af1f689e956:/# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 60: eth0@if61: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever
3.ifconfig
(1)導入
・apt update
・apt install -y net-tools
実例:
apt update && apt install -y net-tools
(2)実行
・ifconfig
(base) root@7af1f689e956:/# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 814652 bytes 192672924 (183.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 203109 bytes 3097042370 (2.8 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4.ping
(1)導入
・apt update
・apt install -y iputils-ping
(2)実行
・ping <宛先IPアドレス>
※実行回数指定オプション:-c <回数>
5.nslookup
(1)導入
apt update && apt install -y iputils-ping
6.注意点
これらをDockerコンテナ・ローカル環境間で使用する場合、以下を考慮する必要があります。
(1)問題:
以下は、問題発生時の原因となる可能性が高いものです。
- Dockerのネットワーク設定: Docker for Windowsでは、デフォルトのブリッジネットワーク設定により、コンテナからホストへの接続は許可されているが、ホストからコンテナへの接続がブロックされている場合があります。
- ICMPの許可設定: Dockerコンテナの内部で動作しているOSのファイアウォールやセキュリティポリシーにより、ICMP(ping)パケットがブロックされている可能性があります。
- Windowsのファイアウォールやセキュリティソフト: Windowsのファイアウォールやインストールされているセキュリティソフトによっては、ホストからのコンテナへのpingがブロックされることがあります。
- 仮想マシンのネットワーク設定: Docker for Windowsは背後でHyper-Vを使用しているため、Hyper-Vのネットワーク設定が関与している可能性も考えられます。
(2)対処方法:
上記の対処方法には以下の様なものがあります。
- Dockerのネットワーク設定の確認: Dockerのネットワーク設定を確認し、必要に応じて修正します。
- コンテナのファイアウォール設定: コンテナ内のファイアウォールの設定を確認し、pingを許可するように設定変更を行います。
- Windowsのファイアウォールやセキュリティソフトの設定: 一時的にWindowsのファイアウォールやセキュリティソフトを無効にし、それが原因であるかを確認します。
- Dockerの再起動: 一時的な問題の場合、Dockerの再起動で解決することがあります。
実際の環境や設定によっては、他の原因や対処方法が考えられるため、上記の情報を元に状況を確認しながらトラブルシューティングを進める必要があります。