php - 无法连接到 docker-compose 中的数据库服务器(php 和 MariaDB)
问题描述
我构建了一个 docker-compose 文件,它创建了 2 个服务(PHP 和 MariaDB)。不知何故,我无法从 PHP 服务连接到数据库:在 PHP 服务中,一个 Laravel 应用程序正在运行。
错误消息(重定向是数据库中的一个表):
SQLSTATE[HY000] [2002] 连接被拒绝 (SQL: select * from
redirects
)
所有环境变量都应该是正确的。
这是我的 docker-compose.yml:
version: "3.7"
services:
faaren_backend:
image: php:alpine
container_name: FAA-Backend
volumes:
- "./:/faaren_backend"
working_dir: /faaren_backend
command: "php artisan serve --host=0.0.0.0 --port=8000"
ports:
- 8000:8000
build:
context: docker/php
dockerfile: dev.Dockerfile
faaren_database:
image: mariadb
container_name: FAA-Database
ports:
- "3306:3306"
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 1
MYSQL_DATABASE: ${DB_DATABASE}
volumes:
- "faa-db-data:/var/lib/mysql/data"
volumes:
faa-db-data: {}
我的 dev.Dockerfile
FROM php:7.3-fpm
RUN apt-get update
RUN apt-get update && apt-get install -y libzip-dev \
&& docker-php-ext-install zip
RUN apt-get update && apt-get install -y libmagickwand-dev --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN pecl install imagick
RUN docker-php-ext-enable imagick
RUN apt-get install $PHPIZE_DEPS && \
pecl install xdebug && docker-php-ext-enable xdebug && \
docker-php-ext-install pdo_mysql pcntl
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
VOLUME /faaren_backend
最后是我的 .env 文件:
DB_CONNECTION=mysql
DB_HOST=faaren_backend
DB_PORT=3306
DB_DATABASE=faaren_db
DB_USERNAME=root
DB_PASSWORD=
大多数情况下,我都遵循了本教程:https ://medium.com/swlh/laravel-with-docker-compose-de2190569084
解决方案
您需要更改 docker 数据库主机:
DB_CONNECTION=mysql
DB_HOST=faaren_database <-- edit
DB_PORT=3306
DB_DATABASE=faaren_db
DB_USERNAME=root
DB_PASSWORD=
在 docker-compose.yml faaren_backend 部分添加:
depends_on:
- faaren_database
希望有帮助。
推荐阅读
- python - 如何根据最高精度在sklearn的KNeighborsClassifier中选择K
- javascript - Firebase 实时数据库规则 - 允许多个用户访问以列出所有消息
- node.js - oracle:错误:NJS-012:在参数 2 中遇到无效的绑定数据类型
- python - 从 TensorFlow 数据集中提取特征和标签
- java - 链几个 CompletableFuture 操作
- html - 如何将组件放置在另一个组件的右侧
- google-play - Play商店退款所有用户的购买问题
- django - django 路径在 url 栏中显示两次
- javascript - 如何在 JSDoc 中引用存储库?
- javascript - 尝试从文本框中获取数据并将其插入数据库