「Dockerコンテナがうまく起動しない」そんなときにチェックするコマンドまとめ
「Dockerコンテナがうまく起動しない」チェックするコマンドまとめ
今回はきつかったです。
納期1日前に来るデザイン原稿
納期前週金曜日に行われたDockerの本番環境構築への変更
そして、これに伴うコンテナ未起動問題と修正しようとして行った作業によるDocker立ち上がらない問題。
てんこ盛りでした。
と言う事で、その時の現場検証に使われたコマンドで私が知らなかったものを中心にまとめます。
まず、納期直前に行われたDockerの構築編集について触れてみる
私自身この作り方を知りませんでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
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
1 |
^M |
https://www.koikikukan.com/archives/2013/10/15-013333.php
改行コードが化けている。これはJISエンコードでCRLF改行が入ると出てくるらしい
UTF8じゃなければ、そりゃ走らないだろう。
ただこれを解決しても起動しないコンテナが…。
wgetで取得できるようにする
https://qiita.com/Hide-Zaemon/items/400b21183197481ecef4
DeployKey 生成
1 2 3 4 5 |
$ 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] |
1 2 3 4 |
$ vi ~/.ssh/config Host github.com User git IdentityFile ~/.ssh/github_key |
1 |
$ cat ~/.ssh/github_key.pub |
ココで生成された鍵をGitHubにDeployKeyとして登録するとGitHubからReadできるようになる。
1 2 |
$ chmod 600 ~/.ssh/config $ ssh -T git@github.com |
これを実行した後にWgetをインストールする
1 |
$ sudo yum install -y wget |
問題の切り分け方法
まずは、imageなどをすべて消す。
その後、Buildだけ実行
buildが実行出来たら次は起動プロセスを確認
最後に、個別にコンテナを指定して個別に起動確認する
1 2 3 4 |
$ docker-compose build mysql $ docker-compose run --rm mysql sh $ docker-compose up $ docker ps |
これで、コンテナが起動しない理由を個別×パートで確認することができる。
1 |
$ docker-compose down |
Dockerの存在確認
コンテナが立ち上がらない時、Dockerのバージョンを確認するときがあります。
例えば、開発PC上では動いているのに本番サーバーで docker-compose up -d –buildしたら動かなくなったとか。
そんな時に確認するものにバージョン情報があります。
1 2 |
$ docker --version $ docker-compose --version |
これでバージョン確認はOK。
立ち上がってないコンテナに入る
このコマンド知らなかったんですよね。
1 |
$ docker-compose run --rm phpfpm sh |
Buildが完了していて、且つ起きなかったコンテナに入ることができます。
なんで up で起きなかったかの状況確認に最適です。
まとめ
研修のつもりで外部の企業さんにエンジニアとしてお仕事をもらうようになって2か月が経過しました。
おかげで新しい気付きを沢山もらいつつ、刺激的にお仕事できています。
ただ、このブログの更新がおろそかになってますが…。
まぁ、忙しいのはいいことだ!
-
前の記事
自分のPCをMQTTClientにするツール:MQTT.fx 2021.06.18
-
次の記事
Macが欲しい!Windowsユーザーが集団開発で不便を感じMacユーザーに購入方法を聞いた結果 2021.07.06
コメントを残す