【问题标题】:Docker - Nginx, PHP, MySQL - Laravel artisan migrate connection refusedDocker - Nginx、PHP、MySQL - Laravel 工匠迁移连接被拒绝
【发布时间】:2021-02-01 18:58:42
【问题描述】:

我让 Laravel 在 Docker 中运行,带有 3 个容器 - Nginx、MySQL 8 和 PHP 8。

我有以下 docker-compose.yaml

version: '3.8'

services: 
  server:
    build:
      context: .
      dockerfile: dockerfiles/nginx.dockerfile
    ports: 
      - '8000:80'
    volumes: 
      - ./src:/var/www/html
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
    container_name: server
    depends_on: 
      - app
      - db
  app:
    build:
      context: .
      dockerfile: dockerfiles/php.dockerfile
    volumes: 
      - ./src:/var/www/html:delegated
    container_name: app
  db:
    image: mysql:8.0
    env_file: 
      - ./env/mysql.env
    container_name: db

这个命令:

docker-compose up -d server

启动 3 个容器:

CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS         PORTS                  NAMES
5ff5cbefd12e   toolkit_server   "/docker-entrypoint.…"   9 seconds ago    Up 3 seconds   0.0.0.0:8000->80/tcp   server
c7f3c9753909   toolkit_app      "docker-php-entrypoi…"   14 seconds ago   Up 8 seconds   9000/tcp               app
d7b421bd3c3b   mysql:8.0        "docker-entrypoint.s…"   14 seconds ago   Up 9 seconds   3306/tcp, 33060/tcp    db

我想运行php artisan migrate,所以我这样尝试:

docker-compose exec app php artisan migrate

这给了我以下错误:

 Illuminate\Database\QueryException 
 SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = toolkit and table_name = migrations and table_type = 'BASE TABLE')

我的mysql.env文件是这样的:

MYSQL_DATABASE=toolkit
MYSQL_USER=root
MYSQL_PASSWORD=password
MYSQL_ROOT_PASSWORD=password

AND .env:

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=toolkit
DB_USERNAME=root
DB_PASSWORD=password

我已经尝试更改端口,主机,但我无法访问 - 我一定是在某个地方搞砸了。

【问题讨论】:

    标签: php mysql laravel docker nginx


    【解决方案1】:

    请在docker-compose.yml 的app 部分尝试此操作

    links:
        - db
    

    【讨论】:

      【解决方案2】:

      在我的仓促中,我试图在 mysql 准备好之前运行命令。重建后容器可能需要 90 秒才能接受连接。

      docker logs db
      

      一旦它准备好连接,我的命令就会运行。

      【讨论】:

        猜你喜欢
        • 2017-04-18
        • 2016-09-24
        • 2023-02-26
        • 2018-06-08
        • 2019-07-09
        • 2021-11-01
        • 2018-12-02
        • 1970-01-01
        • 2020-04-10
        相关资源
        最近更新 更多