docker - Docker Compose - getaddrinfo 失败:名称或服务未知
问题描述
尝试访问我的 PHP 容器时遇到 mysql 连接问题(正在连接到 MariaDB 容器)
mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/html/config.php on line 16
看起来 PHP 容器不知道我的 MariaDB 容器。配置如何看起来不错。如果我公开我的数据库容器,我可以在本地连接到它。
docker-compose.yaml
version: "3"
networks:
api_server:
services:
db:
image: mariadb
restart: always
volumes:
- ./mariadb_data:/var/lib/mysql
- ./database_dump/dump.sql:/docker-entrypoint-initdb.d/dump.sql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: user
MYSQL_PASSWORD: pass
MYSQL_DATABASE: somedb
php-server:
image: php.core.image
networks:
- api_server
build:
context: ./php
dockerfile: Dockerfile
depends_on:
- db
environment:
ENV_NAME: dev
ports:
- 80:80
用于 PHP 的 Dockerfile
FROM php:7.2-apache
RUN docker-php-ext-install -j$(nproc) mysqli
COPY . /var/www/html/
我在 php 中的连接看起来像:
define('DB_SERVER', 'db');
define('DB_USERNAME', 'user');
define('DB_PASSWORD', 'pass');
define('DB_DATABASE', 'somedb');
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
解决方案
php-server
服务在api_server
网络中,而db
在默认网络中。
您需要添加db
到相同的网络php-server
-api_server
网络或添加另一个网络并向其中添加两种服务。
推荐阅读
- angular - 仅替换 Angular 中 Title 元素的一部分
- python - ModuleNotFoundException youtube-dl 模块无法识别
- javascript - 从数据表中导出 excel 文件时数据之间的空间
- bpf - 密件抄送:ImportError 无法导入名称 BPF
- security - Page_load 方法可能会泄漏服务器端条件值,从而使用户可以从另一个网站进行跟踪
- symfony - 实体类与其他各种实体类的关系
- javascript - 如何用字符串值而不是数据制作图表?
- javascript - 为所有按钮创建一个模式后,我得到了无限循环
- swift - 在 TestFlight 中测试 AppClip:显示卡片?
- neo4j - 如果两个节点 Neo4j 之间不存在关系,则返回数据