LaradockでPostgreSQLを起動できないときの対処法
LaradockでPHP(Laravel)+Apache+PostgreSQLの環境を構築しているなかで、
なぜかコンテナの中からpsqlでPostgreSQLに入れず困っていました。
いろいろ罠に引っかかっていたのでメモ。
ちなみに構築手順はこちらを参考にさせていただきました。
発生していたエラー2つ
root@0f919882960d:/var/www# psql -h postgres -U default
psql: could not translate host name "postgres" to address: Name or service not known
root@0f919882960d:/var/www# psql -h postgres -U default
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Dockerコンテナの中で psql -V
を実行してPostgreSQLのバージョンは確認できていたので、
なんで入れない?とずっと引っかかっていました…。
引っかかった罠① docker-compose upでdoneの記述があるのに起動できていなかった
よく確認すればよかったのですが、完全に「done」を過信していました…。
$ docker-compose up -d postgres apache2 workspace php-fpm
Recreating laradock_postgres_1 ... done
Starting laradock_docker-in-docker_1 ... done
Starting laradock_workspace_1 ... done
Starting laradock_php-fpm_1 ... done
Recreating laradock_apache2_1 ... done
doneだ!って思っていたのですが…。
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------
laradock_apache2_1 /opt/docker/bin/entrypoint ... Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_phpmyadmin_1 /run.sh supervisord -n -j ... Exit 0
laradock_postgres_1 docker-entrypoint.sh postgres Exit 1
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
起動できてないじゃん!!!失敗してる!!!
試しに再起動してみても…。
$ docker-compose restart
Restarting laradock_postgres_1 ... done
Restarting laradock_apache2_1 ... done
Restarting laradock_php-fpm_1 ... done
Restarting laradock_workspace_1 ... done
Restarting laradock_phpmyadmin_1 ... done
Restarting laradock_docker-in-docker_1 ... done
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------
laradock_apache2_1 /opt/docker/bin/entrypoint ... Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_phpmyadmin_1 /run.sh supervisord -n -j ... Up 0.0.0.0:8080->80/tcp, 9000/tcp
laradock_postgres_1 docker-entrypoint.sh postgres Exit 1
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
やっぱりだめ!
…ということで、なにかPostgreSQL関連の設定を間違えていることに気づきました。
引っかかった罠② DATA_PATH_HOSTはデフォルトのままでも動くと思っていた
laradockの.envにある DATA_PATH_HOST
。
参考にしていたサイトではデータの保存先を明示的に指定していたのですが、
まあ何でもいいんでしょ…と高をくくってデフォルトのままでした。
デフォルトではこの状態。
DATA_PATH_HOST=~/.laradock/data
こちら、デフォルトのままだとローカルPCの共通のディレクトリを参照してしまうようです。
いろいろ悪戦苦闘していろいろなプロジェクトでDockerイメージを作っていたので、
それが災いしていた……のかも。
こちらを修正しました。
# DATA_PATH_HOST=~/.laradock/data ←このままだと動かない!!!
DATA_PATH_HOST=../db # プロジェクト内を指定する
そして、もう一度Dockerを立ち上げると…。
$ docker-compose up -d postgres apache2 workspace php-fpm
Recreating laradock_postgres_1 ...
laradock_docker-in-docker_1 is up-to-date
laradock_workspace_1 is up-to-date
laradock_php-fpm_1 is up-to-date
Recreating laradock_postgres_1 ... done
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
laradock_apache2_1 /opt/docker/bin/entrypoint ... Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_phpmyadmin_1 /run.sh supervisord -n -j ... Up 0.0.0.0:8080->80/tcp, 9000/tcp
laradock_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
ついにStateがUpに!立ち上がりました!!
そして、コンテナの中に入ってpsql実行…。
$ docker-compose exec workspace bash
root@0f919882960d:/var/www# psql -h postgres -U default
Password for user default:
psql (10.6 (Ubuntu 10.6-1.pgdg16.04+1), server 9.6.11)
Type "help" for help.
default=#
ついにpsqlでPostgreSQLに入れました。
教訓
1. docker-compose upやdocker-compose restartのdoneは信用しない
→かならずdocker-compose psで確認!
2. Laradock/.envのDATA_PATH_HOSTはデフォルトから変更する
→デフォルトだと他のプロジェクトの影響を受けてしまう
スポンサーリンク