質問編集履歴

2

追加

2020/04/08 05:32

投稿

mammymammy
mammymammy

スコア4

test CHANGED
File without changes
test CHANGED
@@ -571,3 +571,43 @@
571
571
  Please use the argument -v to see more details.
572
572
 
573
573
  ```
574
+
575
+
576
+
577
+ ④ docker-compose.ymlのportsには「ホスト側のポート番号:コンテナ側のポート番号」を指定するが、ホスト側のポート番号は適当に当てられるのに対して、コンテナ側のポート番号は「5432」で固定なのでしょうか(左側は自由に当てられ、3306などにするとエラーが発生した)。
578
+
579
+
580
+
581
+ ⑤コンテナ側のポート番号が固定だったとして、コンテナ側の.envファイルに定義するDB_PORTとも必ず合わせる必要があるのでしょうか(またはDB_PORTの定義は必ずしないといけないのか)。
582
+
583
+
584
+
585
+ ```yml
586
+
587
+ db:
588
+
589
+ image: postgres:10.6
590
+
591
+ container_name: db
592
+
593
+ environment:
594
+
595
+ TZ: 'Asia/Tokyo'
596
+
597
+ POSTGRES_USER: ${DB_USER}
598
+
599
+ POSTGRES_PASSWORD: ${DB_PASS}
600
+
601
+ POSTGRES_DB: ${DB_NAME}
602
+
603
+ volumes:
604
+
605
+ - ./docker/db/data:/var/lib/postgresql/data
606
+
607
+ - ./docker/db/sql:/docker-entrypoint-initdb.d
608
+
609
+ ports:
610
+
611
+ - 10090:5432 //ここの左は固定?
612
+
613
+ ```

1

追加

2020/04/08 05:32

投稿

mammymammy
mammymammy

スコア4

test CHANGED
File without changes
test CHANGED
@@ -329,3 +329,245 @@
329
329
 
330
330
 
331
331
  Macを使用
332
+
333
+
334
+
335
+ ### 追加質問
336
+
337
+
338
+
339
+ ホスト側の.envファイルとdocker-compose.yml、コンテナ側の.envファイルを弄ったら解決しました...。
340
+
341
+
342
+
343
+ 具体的にはホスト側の.envファイルに
344
+
345
+
346
+
347
+ ```env
348
+
349
+ DB_HOST=db //追加(postgresではダメだった)
350
+
351
+ DB_NAME=test_db
352
+
353
+ DB_USER=test_user
354
+
355
+ DB_PASS=test1234
356
+
357
+ TZ=Asia/Tokyo
358
+
359
+ ```
360
+
361
+
362
+
363
+ DB_HOSTを指定し、
364
+
365
+
366
+
367
+ ```docker-compose.yml
368
+
369
+ app:
370
+
371
+ build:
372
+
373
+ context: ./docker/php
374
+
375
+ args:
376
+
377
+ - TZ=${TZ} #Dockerfileで使用するタイムゾーンの設定
378
+
379
+ volumes:
380
+
381
+ - ./src:/work
382
+
383
+ - ./logs:/var/log/php
384
+
385
+ - ./docker/php/php.ini:/usr/local/etc/php/php.ini
386
+
387
+ working_dir: /work
388
+
389
+ environment:
390
+
391
+ #Laravel設定用の環境変数
392
+
393
+ - DB_CONNECTION=pgsql
394
+
395
+ - DB_HOST=${DB_HOST}
396
+
397
+ - DB_DATABASE=${DB_NAME}
398
+
399
+ - DB_USERNAME=${DB_USER}
400
+
401
+ - DB_PASSWORD=${DB_PASS}
402
+
403
+ - TZ=${TZ} #php.iniで使用するタイムゾーンの設定
404
+
405
+ ```
406
+
407
+
408
+
409
+ environmentでDB_HOSTに指定する。
410
+
411
+
412
+
413
+ そして、コンテナ側の.envファイルで
414
+
415
+
416
+
417
+ ```env
418
+
419
+ DB_CONNECTION=pgsql
420
+
421
+ DB_HOST=${DB_HOST}
422
+
423
+ DB_PORT=5432
424
+
425
+ DB_DATABASE=test_db
426
+
427
+ DB_USERNAME=test_user
428
+
429
+ DB_PASSWORD=test1234
430
+
431
+ ```
432
+
433
+
434
+
435
+ ホストで使えるようにしたDB_HOSTを指定する。
436
+
437
+
438
+
439
+ このようにすれば、マイグレートできました。
440
+
441
+
442
+
443
+ ```sh
444
+
445
+ [xxxx]$ docker-compose exec app ash [Laravel_Turtorial]+[master]
446
+
447
+ /work # php artisan migrate
448
+
449
+ Nothing to migrate.
450
+
451
+ ```
452
+
453
+
454
+
455
+ ただ、どうしてできたのかがまだイマイチ理解できていません。
456
+
457
+
458
+
459
+ もしよろしければ、下の3つの追加質問にお答えいただけませんでしょうか。
460
+
461
+
462
+
463
+ よろしくお願いいたします。
464
+
465
+
466
+
467
+
468
+
469
+ ① そもそも、「docker-compose.ymlのenvironmentに指定した変数は、環境変数として他のファイルから参照できるようになる」という認識で合っているのか
470
+
471
+
472
+
473
+ ② ①の認識で合っているのだとしたら、docker-compose.ymlのdbとappに同じような記述(environmentでデータベース関連の情報を渡している)をする必要はないのか
474
+
475
+
476
+
477
+ ```docker-compose.yml
478
+
479
+ services:
480
+
481
+ db:
482
+
483
+ ...
484
+
485
+ container_name: db
486
+
487
+ environment:
488
+
489
+ TZ: 'Asia/Tokyo'
490
+
491
+ POSTGRES_USER: ${DB_USER}
492
+
493
+ POSTGRES_PASSWORD: ${DB_PASS}
494
+
495
+ POSTGRES_DB: ${DB_NAME}
496
+
497
+ ...
498
+
499
+ app:
500
+
501
+ ...
502
+
503
+ environment:
504
+
505
+ #Laravel設定用の環境変数
506
+
507
+ - DB_CONNECTION=pgsql
508
+
509
+ - DB_HOST=${DB_HOST}
510
+
511
+ - DB_DATABASE=${DB_NAME}
512
+
513
+ - DB_USERNAME=${DB_USER}
514
+
515
+ - DB_PASSWORD=${DB_PASS}
516
+
517
+ - TZ=${TZ} #php.iniで使用するタイムゾーンの設定
518
+
519
+ ```
520
+
521
+
522
+
523
+ ③ ホスト側の.envのDB_HOSTに、dbではなくpostgresと記述したら下記のようなエラーが発生したが、それはなぜか
524
+
525
+
526
+
527
+ ```
528
+
529
+ 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')
530
+
531
+
532
+
533
+ at /work/vendor/laravel/framework/src/Illuminate/Database/Connection.php:670
534
+
535
+ 666| // If an exception occurs when attempting to run a query, we'll format the error
536
+
537
+ 667| // message to include the bindings with SQL, which will make this exception a
538
+
539
+ 668| // lot more helpful to the developer instead of just the database's errors.
540
+
541
+ 669| catch (Exception $e) {
542
+
543
+ > 670| throw new QueryException(
544
+
545
+ 671| $query, $this->prepareBindings($bindings), $e
546
+
547
+ 672| );
548
+
549
+ 673| }
550
+
551
+ 674|
552
+
553
+
554
+
555
+ Exception trace:
556
+
557
+
558
+
559
+ 1 PDOException::("SQLSTATE[08006] [7] could not translate host name "postgres" to address: Name does not resolve")
560
+
561
+ /work/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:69
562
+
563
+
564
+
565
+ 2 PDO::__construct("pgsql:host=postgres;dbname=test_db;port=5432;sslmode=prefer", "test_user", "test1234", [])
566
+
567
+ /work/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:69
568
+
569
+
570
+
571
+ Please use the argument -v to see more details.
572
+
573
+ ```