在Laravel 5.8的Docker内部迁移期间连接被拒绝

时间:2019-04-16 21:06:22

标签: laravel docker laravel-5 docker-compose dockerfile

在构建docker期间,我似乎无法进行迁移。

我尝试过

docker-compose.yml

version: '3'
services:
  portalmodules:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8011:8000
    links:
      - database
  database:
    image: postgres:11.2
    ports:
    - "5432:5432"
    expose:
    - "5432"
    environment:
      - "POSTGRES_PASSWORD=12345"
      - "POSTGRES_USER=john"
      - "POSTGRES_DB=api"

Dockerfile

FROM composer:1.8.5 as build_stage

COPY . /src
WORKDIR /src
RUN composer install

FROM alpine:3.8
RUN apk --no-cache add \
php7 \
php7-mbstring \
php7-session \
php7-openssl \
php7-tokenizer \
php7-json \
php7-pdo \
php7-pdo_pgsql \
php7-pgsql

COPY --from=build_stage /src  /src
RUN ls -al
RUN set -x \
addgroup -g 82 -S www-data \
adduser -u 82 -D -S -G www-data www-data

WORKDIR /src
RUN ls -al
RUN chmod -R 777 storage
RUN chmod +x run.sh
RUN cp run.sh /tmp
ENTRYPOINT ["/tmp/run.sh"]

run.sh

#!/bin/sh

php artisan migrate:fresh --seed
php artisan serve --host=0.0.0.0

.env

APP_NAME=API
APP_ENV=local
APP_KEY=base64:Qa3U2oP5IQ93MGEJu61MrcQFRSsS5vQRWUrqYwIplEo=
APP_DEBUG=true
APP_URL=http://1.1.1.1
#---------------------------------------------- DATABASE
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=api
DB_USERNAME=john
DB_PASSWORD=12345

我尝试了DB_HOST localhost127.0.0.1database的3个差异值

我不断得到

enter image description here

人们将如何进行进一步的调试?

1 个答案:

答案 0 :(得分:1)

正确的DB_HOSTdatabase,因为每个容器都有自己的IP地址,因此您的数据库不在应用程序的localhost上。

请注意,您将同时启动数据库和laravel应用程序,因此数据库可能仍在初始化中,然后运行迁移,并且由于无法连接数据库太早而无法连接。

您有一些选择:等待直到数据库准备就绪,然后再运行迁移,重试迁移直到成功,或者使用与laravel应用程序相同的映像从其他服务运行迁移命令(并设置restart: on-failure因此迁移容器会重新启动,直到成功迁移为止。