いつの間にか復活している君

はじめに  

作問者のabeです. 実はこの問題は史実に基づいて作られた問題です.

回答を見ていると私と同じ罠に引っかかったチームが居て嬉しかったです(?).

問題文  

部長さんへ

新米エンジニアの捕鯨太郎です。 プロジェクトでWEBサーバを構築するとのことなので、 docker-composeを使用してWEBサーバを構築しました。 無事に起動し、WEBページも確認できたのですが、 再起動するとアクセスできなくなってしまいました。

自動的に再起動するように記述してあるので不可解です。 しかも、トラブルシュートしているといつの間にか アクセスできるようになります。自分には原因がわかりません。

お知恵を拝借したいのですが、 お時間をいただけないでしょうか。

前提条件  

  • ~/web-server/docker-compose.ymlがあり編集可能
  • docker ps -aなどで確認するとコンテナが起動している

初期状態  

踏み台から $ curl 192.168.17.1 をしても応答がない

終了状態  

再起動しても踏み台から $ curl -I 192.168.17.1 をするとステータスコード200のレスポンスが返ってくる

答え  

まずは初期状態を確認しましょう.

~ curl 192.168.17.1
curl: (7) Failed to connect to 192.168.17.1 port 80: Connection refused

WEBページにアクセスできないのが確認できます. 次にコンテナの様子をみてみましょう.

user@docker:~$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                NAMES
4e7db3e7cc97        nginx:latest        "/docker-entrypoint.…"   3 minutes ago       Up Less than a second   0.0.0.0:80->80/tcp   web-server_nginx_1

あれあれ,起動しているな…

もう一度確認すると… いつの間にか復活してる!!!

~ curl 192.168.17.1 -I
HTTP/1.1 200 OK
Server: nginx/1.19.6
Date: Sun, 07 Mar 2021 03:33:11 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 15 Dec 2020 13:59:38 GMT
Connection: keep-alive
ETag: "5fd8c14a-264"
Accept-Ranges: bytes

確認作業を行っているうちに復活してしまいました.

実はdockerコマンドを叩くとデーモンが起動するという罠があります.先ほどのdocker ps -aを見てみるとUp Less than a secondとあり,起動したてなのがわかります.

以下のコマンドで確認するとデーモンは起動していますが,enableになっていない事がわかります.

ictsc@docker:~$ systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; disabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-03-07 12:32:53 JST; 9min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 2176 (dockerd)
      Tasks: 17
     Memory: 114.7M
     CGroup: /system.slice/docker.service
             ├─2176 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
             └─2362 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.18.0.2 -container-port 80
             

ictsc@docker:~$ systemctl is-enabled docker
disabled

そう,enableのし忘れですね.以下のコマンドで解決です.

systemctl enable docker

採点基準  

dockerサービスをenableできたか.

おわりに  

前提条件に書いた2点,docker-compose.ymlが編集可能である,docker ps -aすると起動している, に引っかかってくれたチームがいて嬉しかったです.

冷静に確認されると一瞬で解決してしまう問題なので簡単枠で出題しました.