「Dockerコンテナがうまく起動しない」そんなときにチェックするコマンドまとめ
「Dockerコンテナがうまく起動しない」チェックするコマンドまとめ
今回はきつかったです。
納期1日前に来るデザイン原稿
納期前週金曜日に行われたDockerの本番環境構築への変更
そして、これに伴うコンテナ未起動問題と修正しようとして行った作業によるDocker立ち上がらない問題。
てんこ盛りでした。
と言う事で、その時の現場検証に使われたコマンドで私が知らなかったものを中心にまとめます。
まず、納期直前に行われたDockerの構築編集について触れてみる
私自身この作り方を知りませんでした。
version: '3'
services:
fluentd:
container_name: fluentd
build:
context: ./
dockerfile: docker/fluentd/Dockerfile
args:
CHANGE_UID_GID: ${DOCKER_BUILD_ARG_CHANGE_UID_GID:-false}
CHANGE_UID_GID_BEFORE_UID: ${ARG_CHANGE_UID_GID_BEFORE_UID:-""}
CHANGE_UID_GID_BEFORE_GID: ${ARG_CHANGE_UID_GID_BEFORE_GID:-""}
volumes:
- ./storage/logs:/fluentd/log
ports:
- 4224:4224
networks:
- hoge
nginx:
container_name: nginx
build:
context: ./
dockerfile: docker/nginx/Dockerfile
args:
PHPFPM_BACKEND_PATH: ${ARG_PHPFPM_BACKEND_PATH:-phpfpm}
PHPFPM_BACKEND_PORT: ${ARG_PHPFPM_BACKEND_PORT:-9000}
ports:
- ${FORWARD_NGINX_PORT:-80}:80
volumes:
- ./:/var/www/html
networks: - hoge
logging:
driver: 'fluentd'
options:
fluentd-address: localhost:4224
tag: docker.nginx.{{.FullID}}
depends_on:
- nodejs
- fluentd
phpfpm:
container_name: phpfpm
image: phpfpm
build:
context: ./
dockerfile: docker/phpfpm/Dockerfile
args:
ENVIRONMENT: ${ARG_ENVIRONMENT:-local}
CHANGE_UID_GID: ${ARG_CHANGE_UID_GID:-false}
CHANGE_UID_GID_BEFORE_UID: ${ARG_CHANGE_UID_GID_BEFORE_UID:-""}
CHANGE_UID_GID_BEFORE_GID: ${ARG_CHANGE_UID_GID_BEFORE_GID:-""}
environment:
- CONTAINER_ROLE=app
logging:
driver: 'fluentd'
options:
fluentd-address: localhost:4224
tag: docker.app.{{.FullID}}
depends_on:
- fluentd
networks: - hoge
volumes:
- ./:/var/www/html
scheduler:
container_name: scheduler
image: phpfpm
environment:
CONTAINER_ROLE: scheduler
volumes:
- ./:/var/www/html
networks:
- hoge
logging:
driver: 'fluentd'
options:
fluentd-address: localhost:4224
tag: docker.scheduler.{{.FullID}}
depends_on:
- phpfpm
queue-worker:
container_name: queue-worker
image: phpfpm
environment:
CONTAINER_ROLE: queue-worker
volumes:
- ./:/var/www/html
networks:
- hoge
logging:
driver: 'fluentd'
options:
fluentd-address: localhost:4224
tag: docker.queue-worker.{{.FullID}}
depends_on:
- phpfpm
nodejs:
container_name: nodejs
image: nodejs
build:
context: ./
dockerfile: ./docker/nodejs/Dockerfile
args:
ENVIRONMENT: ${ARG_ENVIRONMENT:-local}
YARN_RUN_ENV: ${ARG_YARN_RUN_ENV:-prod}
volumes:
- ./:/var/www/html
networks:
- hoge
logging:
driver: 'fluentd'
options:
fluentd-address: localhost:4224
tag: docker.nodejs.{{.FullID}}
depends_on:
- fluentd
mysql:
container_name: mysql
build:
context: ./
dockerfile: docker/mysql/Dockerfile
ports:
- ${FORWARD_DB_PORT:-3306}:3306
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'hoge-mysql:/var/lib/mysql'
networks:
- - hoge
logging:
driver: 'fluentd'
options:
fluentd-address: localhost:4224
tag: docker.mysql.{{.FullID}}
depends_on:
- fluentd
mailhog:
container_name: mailhog
image: 'mailhog/mailhog:latest'
ports:
- 1025:1025
- 8025:8025
networks:
- hoge
logging:
driver: 'fluentd'
options:
fluentd-address: localhost:4224
tag: docker.mailhog.{{.FullID}}
depends_on:
- fluentd
networks:
hoge
driver: bridge
volumes:
hoge-mysql:
driver: local
hoge-mysql-test:
driver: local
networks: / volumes: という形で用意し、パーツ分けしたコンテナを統合しています。
例えば、Nodejsはnodejs:というコンテナを作成してしまい networks: - hogeで繋げてあげるとフレームワーク内のnode.jsとして扱えるというもの。
これね、nodeだけでバージョン管理できたりと効果が非常に高いそうです。
目次的なやつを書いときます
- GitHubからReadできるようにする【wgetで取得】
- 一発で行けるからつい使うけど、問題発生時は分けましょう【起動しない時の問題切分け】
- UPができなくてもコンテナの中に入る方法はある
- Dockerの存在確認【Dockerのバージョンが知りたくなる時がある】
一発で行けるからつい使うけど、問題発生時は分けましょう
docker-compose build
docker-compose up
Dockerの存在確認
docker --version
docker-compose --version
立ち上がってないコンテナに入る
docker-compose run --rm phpfpm sh
今回の原因その1
^M
改行コードが化けている。これはJISエンコードでCRLF改行が入ると出てくるらしい
UTF8じゃなければ、そりゃ走らないだろう。
ただこれを解決しても起動しないコンテナが...。
wgetで取得できるようにする
EC2にgit cloneする方法 #AWS - Qiita
EC2にコードを展開する時、git cloneでやると簡単にDeployできます。 なんとなく手順を覚えているものの、ところどころ忘れていることもあるので、やり方をまとめておきま…
DeployKey 生成
$ cd ~/.ssh $ ssh-keygen -t rsa Enter file in which to save the key (): github_key Enter passphrase (empty for no passphrase): [Enter] Enter same passphrase again: [Enter]
$ vi ~/.ssh/config Host github.com User git IdentityFile ~/.ssh/github_key
$ cat ~/.ssh/github_key.pub
ココで生成された鍵をGitHubにDeployKeyとして登録するとGitHubからReadできるようになる。
$ chmod 600 ~/.ssh/config $ ssh -T git@github.com
これを実行した後にWgetをインストールする
$ sudo yum install -y wget
問題の切り分け方法
まずは、imageなどをすべて消す。
その後、Buildだけ実行
buildが実行出来たら次は起動プロセスを確認
最後に、個別にコンテナを指定して個別に起動確認する
$ docker-compose build mysql $ docker-compose run --rm mysql sh $ docker-compose up $ docker ps
これで、コンテナが起動しない理由を個別×パートで確認することができる。
$ docker-compose down
Dockerの存在確認
コンテナが立ち上がらない時、Dockerのバージョンを確認するときがあります。
例えば、開発PC上では動いているのに本番サーバーで docker-compose up -d --buildしたら動かなくなったとか。
そんな時に確認するものにバージョン情報があります。
$ docker --version $ docker-compose --version
これでバージョン確認はOK。
立ち上がってないコンテナに入る
このコマンド知らなかったんですよね。
$ docker-compose run --rm phpfpm sh
Buildが完了していて、且つ起きなかったコンテナに入ることができます。
なんで up で起きなかったかの状況確認に最適です。
まとめ
研修のつもりで外部の企業さんにエンジニアとしてお仕事をもらうようになって2か月が経過しました。
おかげで新しい気付きを沢山もらいつつ、刺激的にお仕事できています。
ただ、このブログの更新がおろそかになってますが...。
まぁ、忙しいのはいいことだ!




