はじめに
PostgreSQLではポート被りの問題を解消できず、環境構築できておりません。備忘録です。
5/19追記:永続化はできていませんが一応起動することはできました。以下記事にまとめています。
「Laravel(+Vue.js)でSNS風Webサービスを作ろう!」をWindows+Laradock(PostgreSQL)でやってみた
また、MySQLでは環境構築ができており、以下の記事でまとめていますので参考にしていただければ幸いです。
(PostgreSQLの環境構築に挑戦したことで理解が深まりMySQLで環境構築&アプリ制作までできました。)
環境構築
Laradockを新しくインストールするディレクトリを作成。
$ mkdir laravel-sns $ cd laravel-sns
Laradockをインストール。
$ git clone https://github.com/Laradock/laradock.git -b v9.6
Laradockの.envファイルを作成
$ cd laradock $ cp env-example .env
.envファイルを編集
APP_CODE_PATH_HOST=../ DATA_PATH_HOST=~/.laradock/data COMPOSE_PROJECT_NAME=laradock
↓
APP_CODE_PATH_HOST=../laravel #laravelのプロジェクトファイル名に書き換え DATA_PATH_HOST=../data #複数データを参照してしまう可能性があるため COMPOSE_PROJECT_NAME=laravel-sns #dockerのコンテナ名を変更
laradock/postgres
ディレクトリにあるDockerfile
の1行目を修正してバージョン指定
FROM postgres:11.6
ソフトウェア本体となるDockerイメージをダウンロードして、コンテナ起動(ダウンロードは初回のみ)
$ cd ~/laravel-sns/laradock $ docker-compose up -d workspace php-fpm nginx postgres
完了

※WARNINGは【警告:サービスnginxのイメージは、まだ存在しなかったために作成されました。 このイメージを再構築するには、「docker-compose build」または「docker-compose up –build」を使用する必要があります。】とのこと。
Laravelのインストール (docker-composeコマンドは今後もlaradockディレクトリで実行するようにする。)
$ docker-compose exec workspace composer create-project --prefer-dist laravel/laravel . "6.8.*"
Application key set successfully
と表示されたらhttp://localhost/へアクセス。

簡単に表示されました◎
アプリ制作
コントローラー作成
Laradockディレクトリでコマンド実行すること!!
$ docker-compose exec workspace php artisan make:controller ArticleController

データベース作成
psqlでデータベースを作ることを試みるが失敗。
$ docker-compose exec workspace psql -U default -h postgres psql: could not translate host name "postgres" to address: Name or service not known
以下で起動できていないことが判明!!(その後再起動しても変わらず。)doneなっててもあてにしてはいけないらしい。。。
$ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------------ laravel-sns_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/tcp laravel-sns_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp laravel-sns_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp laravel-sns_postgres_1 docker-entrypoint.sh postgres Exit 1 laravel-sns_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
laradockの.envファイルを以下に編集してみるも変わらず。
# DATA_PATH_HOST=~/.laradock/data DATA_PATH_HOST=../db # プロジェクト内を指定する POSTGRES_PORT=5433 #ポート番号の変更
laradock/postgres
ディレクトリにあるDockerfile
のボート番号も修正。
EXPOSE 5433
実行するも変わらないので、ホストをlocalhostに変えて実行。
$ docker-compose exec workspace psql -U default -h localhost psql: could not connect to server: Connection refused Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432? could not connect to server: Cannot assign requested address Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5432?
イメージを作成した際に5432にしていたので、後々変更しても5433には変わらないのかも。。。
以前インストールしたPostgreSQLのポートを変更 C:\PostgreSQL\12\data
ディレクトリにあるpostgresql.confを変更するも変わらず。
port = 5433
試しにポートが何に使われているか調べてみる。
$ netstat -nao アクティブな接続 プロトコル ローカル アドレス 外部アドレス 状態 PID TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1296 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:2179 0.0.0.0:0 LISTENING 7424 TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING 9220 TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING 8504 #これが犯人っぽい!!
タスクマネージャーを起動してタスクを終了。変わらない。

サービスの停止。変わらず。

仕方ないので一度アンインストール。変わらない。泣
C:\Program Files\PostgreSQL\12\uninstall-postgresql.exe
注意されていたイメージを構築。変わらず。
$ docker-compose up --build
とりあえず一旦おいてマイグレーションできるかダメもとでチェックするため、laravelディレクトリ側の.envファイルを編集。
DB_CONNECTION=pgsql DB_HOST=postgres DB_PORT=5432 DB_DATABASE=larasns DB_USERNAME=default DB_PASSWORD=secret
テーブル作成。作成できる。
$ docker-compose exec workspace php artisan make:migration create_articles_table --create=articles Created Migration: 2020_03_24_153153_create_articles_table
マイグレーションは失敗。DBができてないんだから当たり前だよね。。。泣
$ docker-compose exec workspace php artisan migrate Illuminate\Database\QueryException : SQLSTATE[08006] [7] could not translate host name "postgres" to address: Name or service not known (SQL: select * from information_schema.tables where table_schema = public and table_name = migrations and table_type = 'BASE TABLE') at /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669 665| // If an exception occurs when attempting to run a query, we'll format the error 666| // message to include the bindings with SQL, which will make this exception a 667| // lot more helpful to the developer instead of just the database's errors. 668| catch (Exception $e) { > 669| throw new QueryException( 670| $query, $this->prepareBindings($bindings), $e 671| ); 672| } 673| Exception trace: 1 PDOException::("SQLSTATE[08006] [7] could not translate host name "postgres" to address: Name or service not known") /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 2 PDO::__construct("pgsql:host=postgres;dbname=larasns;port=5432;sslmode=prefer", "default", "secret", []) /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 Please use the argument -v to see more details.
以下でポートが使われていないことは確認。
$ netstat -nao
laradockの.envに以下の1行を追加。
DB_HOST=postgres
laravelの.envを見直し。
DB_DATABASE=default
ダメ元チェック失敗。
$ docker-compose exec workspace psql -U default -h postgres psql: could not translate host name "postgres" to address: Name or service not known
1からコンテナを作り直すべきか。。。
コンテナ作り直してトライ
コンテナにコピーした設定ファイルの改行コードがCRLFになっているため(コンテナはLinuxベースなので改行コードがLFである必要がある)カレントフォルダ以下のファイルをCRLFからLFに一括変換
$ cd postgres/docker-entrypoint-initdb.d $ find * -type f -exec sed -i "s/\\r\\n/\\n/g" {} \;
docker-compose up前にPostgresディレクトリのDockerfileのEXPOSEも54320に変更してからコマンド実行するも失敗。
$ docker-compose ps laravel-sns2_postgres_1 docker-entrypoint.sh postgres Exit 1
PostgreSQLが最後まで起動できず。DBも作れないのでマイグレーションできない。
docker-compose.ymlを編集してみるも失敗。
### PostgreSQL ##### ports: # - "${POSTGRES_PORT}:5432" - "${POSTGRES_PORT}:54320"
最後に
かなり格闘しましたがPostgreSQLを最後まで起動できず。
引き続き挑戦するので都度更新していきます。。。
参考にした教材
Laravel(+Vue.js)でSNS風Webサービスを作ろう!
https://www.techpit.jp/p/laravel-vue-sns
参考サイト
LaradockでPostgreSQLを起動できないときの対処法
https://shigu493.com/laradock%E3%81%A7postgresql%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%A8%E3%81%8D%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95/
あるポート番号が何のアプリケーションで使用されているか調べる方法
https://www.projectgroup.info/tips/Windows/comm_0133.html
Laradockを用いてDocker + CentOS + Apache + PHP7 + PostgreSQLな環境を作る
https://qiita.com/rema424/items/ba6e6f440c415fed7b0c
Windows 10でDocker + Laravel環境構築
https://qiita.com/de_teiu_tkg/items/bd9df11c981b966a0c3e
LaravelでPostgreSQLを使うための設定メモ
https://qiita.com/aminevsky/items/52f56546f081c52b79ed
コメントを残す