【问题标题】:Problems dockerizing Laravel application - database hosts array is emptydockerizing Laravel 应用程序的问题 - 数据库主机数组为空
【发布时间】:2021-05-10 16:18:05
【问题描述】:

我正在尝试 dockerize 现有的 Laravel + Vue.js 应用程序,但是,当尝试访问数据库时出现错误:

数据库主机数组为空。

看起来从 PHP 到 MYSQL 的连接失败(但 MySQL 映像正在运行,我可以从终端连接到它)。不知道如何进行。在我看来,这不是配置错误。有办法调试吗?

这是我所拥有的:

docker-compose.yml:

version: '3'

networks:
  backoffice:

services:
  backoffice_nginx:
    image: nginx:stable
    container_name: backoffice_nginx
    restart: unless-stopped
    ports:
      - "8088:80"
    volumes:
      - ./src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - backoffice_php
    networks:
      - backoffice

  backoffice_mysql:
    image: mysql:8.0.13
    container_name: backoffice_mysql
    restart: unless-stopped
    tty: true
    ports:
      - "33067:3306"
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--default-authentication-plugin=mysql_native_password']
    environment:
      MYSQL_DATABASE: my_db
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: mypass
      MYSQL_ROOT_PASSWORD: myrootpass
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - ./mysql/db:/var/lib/mysql
      - ./mysql/conf.d:/etc/mysql/conf.d
    networks:
      - backoffice

  backoffice_php:
    build:
      context: .
      dockerfile: php.dockerfile
    container_name: backoffice_php
    restart: unless-stopped
    volumes:
      - ./src:/var/www/html
    networks:
      - backoffice

  backoffice_composer:
    image: composer:latest
    container_name: backoffice_composer
    volumes:
      - ./src:/var/www/html
    working_dir: /var/www/html
    depends_on:
      - backoffice_php
    networks:
      - backoffice


  backoffice_artisan:
    build:
      context: .
      dockerfile: php.dockerfile
    container_name: backoffice_artisan
    volumes:
      - ./src:/var/www/html
    working_dir: /var/www/html
    entrypoint: ['php', '/var/www/html/artisan']
    networks:
      - backoffice

php.dockerfile:

FROM php:7.4-fpm

WORKDIR /var/www/html

RUN docker-php-ext-install bcmath pdo pdo_mysql

RUN pecl install -o -f redis \
&&  rm -rf /tmp/pear \
&&  docker-php-ext-enable redis

.env 中的数据库配置部分:

DB_CONNECTION=mysql
DB_HOST=backoffice_mysql
DB_PORT=3306
DB_DATABASE=my_db
DB_USERNAME=root
DB_PASSWORD=myrootpass

以下是正在运行的容器:

有什么想法吗? 谢谢。

【问题讨论】:

  • db 主机值为空时通常会产生此错误。 可能在您的数据库配置文件中,引用的 env 常量不是 DB_DATABASE,因此可能值得检查 db 配置文件以确定。 (另外,你的端口不应该是33067吗?只是大声思考;我的docker知识不好)
  • @user3532758,感谢您提醒我,这是一个配置问题,调整配置解决了我的问题(它是特定于项目的,所以我不在这里添加)。关于端口号,它应该是内部端口号,因为连接位于“docker compose”内部。

标签: laravel docker docker-compose dockerfile


【解决方案1】:

您没有与您的容器共享您的 .env 文件。映射你的整个 .卷到容器,而不仅仅是你的 ./src 目录。

【讨论】:

  • 感谢您的回答!其实.env./src目录里面,外面只有docker/docker相关文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 2021-07-03
  • 2020-01-13
  • 2017-07-18
  • 1970-01-01
  • 2020-09-02
相关资源
最近更新 更多