landrunner’s blog

しばらく開発から離れてた人間が、技術的キャッチアップを図るための勉強ブログ

docker runして動かなかったときにとりあえずやること

Dockerfileを書いてイメージを作ってdocker runしても動かない場合というは多々あります。

そんな時はログを見るとよいです。

例) これはuWSGIを使用してアプリケーションサーバを公開する例です。

  • Dockerfile
FROM python:3.7
RUN groupadd -r uwsgi && useradd -r -g uwsgi uwsgi && \
    pip install Flask uWSGI
WORKDIR /app
COPY app /app

EXPOSE 9090 9091
USER uwsgi

#CMD ["python","identidock.py"]
CMD ["uwsgi", "--http", "0.0.0.0:9090", "--wsgi-file", "/app/identidock.py", "--callable", "app", "--state", "0.0.0.0:9191"]
  • イメージの作成
root@debian:~/identidock# docker image build -t identidock .
Sending build context to Docker daemon  3.584kB
Step 1/7 : FROM python:3.7
 ---> 14a2caeca327
Step 2/7 : RUN groupadd -r uwsgi && useradd -r -g uwsgi uwsgi &&     pip install Flask uWSGI
 ---> Using cache
 ---> e7596b2abed1
Step 3/7 : WORKDIR /app
 ---> Using cache
 ---> 4d6c01e3e5e0
Step 4/7 : COPY app /app
 ---> Using cache
 ---> 9484a3176a0f
Step 5/7 : EXPOSE 9090 9091
 ---> Using cache
 ---> 81c6ebd68a7f
Step 6/7 : USER uwsgi
 ---> Using cache
 ---> bd0639f392bb
Step 7/7 : CMD ["uwsgi", "--http", "0.0.0.0:9090", "--wsgi-file", "/app/identidock.py", "--callable", "app", "--state", "0.0.0.0:9191"]
 ---> Running in d38d56bb817d
Removing intermediate container d38d56bb817d
 ---> d88bed7c4460
Successfully built d88bed7c4460
Successfully tagged identidock:latest

ちゃんと作成できたようです。

  • コンテナ実行と起動確認
root@debian:~/identidock# docker container run -d -P --name port-test identidock
530dfa5b8cd55da997ccdec048c4f9bde17fe53b0c3eb8b5d30b9ad4d59163c4
root@debian:~/identidock# docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
530dfa5b8cd5        identidock          "uwsgi --http 0.0.0.…"   20 seconds ago      Exited (1) 18 seconds ago                       port-test

本来であればそのまま起動しておいてほしいのですがStatusがExitedになっています。

こんな時にdocker container logsを使用して原因を調べます。

uwsgi: unrecognized option '--state'
getopt_long() error

はい、オプション間違えてるだけでした。

本来ならstatsと書くべきところをstateにしてuWSGIが動かなかっただけです。

まあ今回はこんなしょぼいミスだったですが、ログを見ないと意外とどこが悪いか気づけないものなので、どんどん見るようにしましょう。