【发布时间】: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