Dockerイメージには基本的には必要なサービスだけがインストールされており、トラブルシュートなどで使う pingやnslookup、さらにifconfigなどのネットワーク系のパッケージはインストールされてません。
それはそれで当然で非常に理にかなっていて良いのですが、トラブルシュートをする時は少し困る場面があります。
そこで、今回はコンテナにpingやnslookup、ifconfigコマンドが使えるようにするために、ネットワーク関連のパッケージをインストールしてみました。そのメモとなります。
インストール方法(Ubuntuベース)
まずはコンテナへ接続します。例としてgitlab_gitlab_1のコンテナに接続してます。当然pingがインストールされていないので「 command not found」となります。
bash-3.2$ docker exec -it gitlab_gitlab_1 /bin/bash
root@gitlab:/# cat /etc/issue
Ubuntu 16.04.6 LTS \n \l
root@gitlab:# ping
bash: ping: command not found
root@gitlab:# ifconfig
bash: ifconfig: command not found
では、実際にapt-getコマンドから関連パッケージをインストールしています。
今回はiputils-ping、net-tools、dnsutilsのパッケージをインストールしました。
root@gitlab:/# apt-get update
root@gitlab:/# apt-get install iputils-ping net-tools dnsutils
注意:apt-get updateの事前実行が必要です
いきなりapt-get installしようとすると依存関係の問題でエラーになります。事前にapt-et updateを実行してください。
root@gitlab:/# apt-get install iputils-ping
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package iputils-ping
確認
インストールが完了したら、実際にpingやipcofigが使えるようになったことを確認します。
これでトラブルシュートを行うことができるようになりますね。ちなみにトラブル原因などが分かった後はそのまま使うのではなく、一旦コンテナを作り直すことを忘れずに。
root@gitlab:/# ping runner
PING runner (172.22.0.2) 56(84) bytes of data.
64 bytes from gitlab_runner_1.gitlab_default (172.22.0.2): icmp_seq=1 ttl=64 time=0.311 m
(略)
---------------------------
root@gitlab:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:16:00:03
inet addr:172.22.0.3 Bcast:172.22.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
(略)
---------------------------
root@gitlab:/# nslookup runner
Server: 127.0.0.11
Address: 127.0.0.11#53
Non-authoritative answer:
Name: runner
Address: 172.22.0.2
参考になる書籍
私も持っている書籍ですが、Docker初心者向けに使い方から解説されているのでわかりやすかったです。ネットワークについても記載があり理解に役立ちました。
Docker実践入門――Linuxコンテナ技術の基礎から応用まで (Software Design plus)
今回は以上となります。
コメント