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初心者向けの最初に購入すべき書籍は「さわって学ぶクラウドインフラ docker基礎からのコンテナ構築」です。
さわって学ぶクラウドインフラ docker基礎からのコンテナ構築
本書ではDockerの基本的な概念などの座学ももちろんありますが、実際に、Dockerのインストール方法やWebサーバーをコンテナで構築するハンズオンを通じて学習することができるため、特に初心者の方はは分かりやすい内容となっています。
今回は以上となります。
コメント