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はデフォルトから変更する

→デフォルトだと他のプロジェクトの影響を受けてしまう

スポンサーリンク