はじめに
新しい案件にアサインされた時に、dockerで環境構築中にwebサーバーが立ち上がらなくて困ったことがあった。
先輩にサポートもらいながら解決できたので備忘録。
事象
通常、git管理されているプロジェクトのソースたちをclone後に
docker compose up -d
するとすぐに環境ができてブラウザでlocalhostにアクセスできる。
今回、上記コマンドを実行すると、特にエラーは起きずdockerは起動する(実際にはしていない)のだが、localhostへアクセスと下記の画面が出る。
「ERR_EMPTY_RESPONSE」エラーはブラウザに関連する問題で、サイトへのアクセス要求に対してサーバーが応答しなかったことを意味する。
ちなみにdocker環境は
- mysql
- phpmyadmin
- memcached
- webサーバー
で構成されていて、phpmyadminには無事にアクセスができた。
ポート番号が被ってるかも
よくある(自分だけかも)のがdockerで環境を複数立ち上げていてポート番号使ってるパターン。
(でもこれの場合はdocker起動時にエラー出る)
一応ポート番号を確認してみたが今回のものしか使っていなかった。
sudo lsof -P -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 76016 01054883 149u IPv6 0xfb61021c3152318d 0t0 TCP *:8080 (LISTEN)
docker立ち上げ直す
dockerをキャッシュなしで立ち上げ直す
docker-compose build --no-cache
これも特に変わらずだった。
curlで直接入ってみる
curlコマンドで直接localhostへアクセスするがもちろんエラー。
curl http://localhost:8080/
curl: (7) Failed to connect to localhost port 80 after 9 ms: Connection refused
webサーバーを疑う
エラーはないが、webサーバーが立ち上がってないのかとなったので、dockerに入ってwebサーバーを起動してみると下記のエラーが出た。
systemctl start httpd
Failed to get D-Bus connection: No such file or directory
原因
このエラーで原因がわかった。
Failed to get D-Bus connection: No such file or directory
今回、Docker for macを使って環境構築を行なっていて、Docker for macで使用する「systemd」というコマンドはLinuxの起動処理やシステム管理を行うコマンドで、21年12月からsystemd247以上を使う必要があるらしい。
systemdのverを確認する。(docker内で)
rpm -q systemd
systemd-219-78.el7_9.7.x86_64
systemd219で古かった。
この場合、ダウングレードする必要があったそうだが、settings.jsonの設定を変えることで対応ができるらしい。
~/Library/Group Containers/group.com.docker/settings.json
{
"deprecatedCgroupv1": false, // ← ここをtrueにする
}
これで再起動後に無事にアクセスすることができた!
こちら参考にさせていただきました
https://qiita.com/NaoyaMiyagawa/items/22a870112377a91e1c99