teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

追加

2020/04/08 05:32

投稿

mammymammy
mammymammy

スコア4

title CHANGED
File without changes
body CHANGED
@@ -284,4 +284,24 @@
284
284
  /work/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:69
285
285
 
286
286
  Please use the argument -v to see more details.
287
+ ```
288
+
289
+ ④ docker-compose.ymlのportsには「ホスト側のポート番号:コンテナ側のポート番号」を指定するが、ホスト側のポート番号は適当に当てられるのに対して、コンテナ側のポート番号は「5432」で固定なのでしょうか(左側は自由に当てられ、3306などにするとエラーが発生した)。
290
+
291
+ ⑤コンテナ側のポート番号が固定だったとして、コンテナ側の.envファイルに定義するDB_PORTとも必ず合わせる必要があるのでしょうか(またはDB_PORTの定義は必ずしないといけないのか)。
292
+
293
+ ```yml
294
+ db:
295
+ image: postgres:10.6
296
+ container_name: db
297
+ environment:
298
+ TZ: 'Asia/Tokyo'
299
+ POSTGRES_USER: ${DB_USER}
300
+ POSTGRES_PASSWORD: ${DB_PASS}
301
+ POSTGRES_DB: ${DB_NAME}
302
+ volumes:
303
+ - ./docker/db/data:/var/lib/postgresql/data
304
+ - ./docker/db/sql:/docker-entrypoint-initdb.d
305
+ ports:
306
+ - 10090:5432 //ここの左は固定?
287
307
  ```

1

追加

2020/04/08 05:32

投稿

mammymammy
mammymammy

スコア4

title CHANGED
File without changes
body CHANGED
@@ -163,4 +163,125 @@
163
163
 
164
164
  ### 補足情報(FW/ツールのバージョンなど)
165
165
 
166
- Macを使用
166
+ Macを使用
167
+
168
+ ### 追加質問
169
+
170
+ ホスト側の.envファイルとdocker-compose.yml、コンテナ側の.envファイルを弄ったら解決しました...。
171
+
172
+ 具体的にはホスト側の.envファイルに
173
+
174
+ ```env
175
+ DB_HOST=db //追加(postgresではダメだった)
176
+ DB_NAME=test_db
177
+ DB_USER=test_user
178
+ DB_PASS=test1234
179
+ TZ=Asia/Tokyo
180
+ ```
181
+
182
+ DB_HOSTを指定し、
183
+
184
+ ```docker-compose.yml
185
+ app:
186
+ build:
187
+ context: ./docker/php
188
+ args:
189
+ - TZ=${TZ} #Dockerfileで使用するタイムゾーンの設定
190
+ volumes:
191
+ - ./src:/work
192
+ - ./logs:/var/log/php
193
+ - ./docker/php/php.ini:/usr/local/etc/php/php.ini
194
+ working_dir: /work
195
+ environment:
196
+ #Laravel設定用の環境変数
197
+ - DB_CONNECTION=pgsql
198
+ - DB_HOST=${DB_HOST}
199
+ - DB_DATABASE=${DB_NAME}
200
+ - DB_USERNAME=${DB_USER}
201
+ - DB_PASSWORD=${DB_PASS}
202
+ - TZ=${TZ} #php.iniで使用するタイムゾーンの設定
203
+ ```
204
+
205
+ environmentでDB_HOSTに指定する。
206
+
207
+ そして、コンテナ側の.envファイルで
208
+
209
+ ```env
210
+ DB_CONNECTION=pgsql
211
+ DB_HOST=${DB_HOST}
212
+ DB_PORT=5432
213
+ DB_DATABASE=test_db
214
+ DB_USERNAME=test_user
215
+ DB_PASSWORD=test1234
216
+ ```
217
+
218
+ ホストで使えるようにしたDB_HOSTを指定する。
219
+
220
+ このようにすれば、マイグレートできました。
221
+
222
+ ```sh
223
+ [xxxx]$ docker-compose exec app ash [Laravel_Turtorial]+[master]
224
+ /work # php artisan migrate
225
+ Nothing to migrate.
226
+ ```
227
+
228
+ ただ、どうしてできたのかがまだイマイチ理解できていません。
229
+
230
+ もしよろしければ、下の3つの追加質問にお答えいただけませんでしょうか。
231
+
232
+ よろしくお願いいたします。
233
+
234
+
235
+ ① そもそも、「docker-compose.ymlのenvironmentに指定した変数は、環境変数として他のファイルから参照できるようになる」という認識で合っているのか
236
+
237
+ ② ①の認識で合っているのだとしたら、docker-compose.ymlのdbとappに同じような記述(environmentでデータベース関連の情報を渡している)をする必要はないのか
238
+
239
+ ```docker-compose.yml
240
+ services:
241
+ db:
242
+ ...
243
+ container_name: db
244
+ environment:
245
+ TZ: 'Asia/Tokyo'
246
+ POSTGRES_USER: ${DB_USER}
247
+ POSTGRES_PASSWORD: ${DB_PASS}
248
+ POSTGRES_DB: ${DB_NAME}
249
+ ...
250
+ app:
251
+ ...
252
+ environment:
253
+ #Laravel設定用の環境変数
254
+ - DB_CONNECTION=pgsql
255
+ - DB_HOST=${DB_HOST}
256
+ - DB_DATABASE=${DB_NAME}
257
+ - DB_USERNAME=${DB_USER}
258
+ - DB_PASSWORD=${DB_PASS}
259
+ - TZ=${TZ} #php.iniで使用するタイムゾーンの設定
260
+ ```
261
+
262
+ ③ ホスト側の.envのDB_HOSTに、dbではなくpostgresと記述したら下記のようなエラーが発生したが、それはなぜか
263
+
264
+ ```
265
+ Illuminate\Database\QueryException : SQLSTATE[08006] [7] could not translate host name "postgres" to address: Name does not resolve (SQL: select * from information_schema.tables where table_schema = public and table_name = migrations and table_type = 'BASE TABLE')
266
+
267
+ at /work/vendor/laravel/framework/src/Illuminate/Database/Connection.php:670
268
+ 666| // If an exception occurs when attempting to run a query, we'll format the error
269
+ 667| // message to include the bindings with SQL, which will make this exception a
270
+ 668| // lot more helpful to the developer instead of just the database's errors.
271
+ 669| catch (Exception $e) {
272
+ > 670| throw new QueryException(
273
+ 671| $query, $this->prepareBindings($bindings), $e
274
+ 672| );
275
+ 673| }
276
+ 674|
277
+
278
+ Exception trace:
279
+
280
+ 1 PDOException::("SQLSTATE[08006] [7] could not translate host name "postgres" to address: Name does not resolve")
281
+ /work/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:69
282
+
283
+ 2 PDO::__construct("pgsql:host=postgres;dbname=test_db;port=5432;sslmode=prefer", "test_user", "test1234", [])
284
+ /work/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:69
285
+
286
+ Please use the argument -v to see more details.
287
+ ```