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