我对Docker来说是全新的,我试图用docker-compose创建一个LEMP堆栈。我的所有容器都在运行,但是我无法将我的php容器连接到我的mysql容器。我有一个看起来像这样的docker-compose.yml:
version: '2'
services:
nginx:
image: evild/alpine-nginx:1.9.15-openssl
container_name: lemp_nginx
restart: always
links:
- php:php
volumes:
- ./html:/var/www/html/:ro
- ./nginx/conf/nginx.conf:/etc/nginx/conf/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
ports:
- 80:80
- 443:443
php:
build:
context: .
dockerfile: Dockerfile.php-fpm
container_name: lemp_php
restart: always
volumes:
- ./html:/var/www/html
depends_on:
- db
links:
- db:db
db:
image: mariadb:latest
container_name: lemp_mariadb
restart: always
volumes:
- db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: wp
MYSQL_DATABASE: wp
volumes:
db-data:
driver: local
然后在我的./html文件夹中,我创建了一个index.php文件,其中包含以下内容以测试数据库连接:
<?php
$dbuser = 'root';
$dbpass = 'wp';
$dbhost = 'db';
$connect = mysqli_connect($dbhost, $dbuser, $dbpass) or die("Unable to Connect to '$dbhost'");
echo "Connected to DB!";
结果如下: 警告:mysqli_connect():( HY000 / 1045):用户访问被拒绝&#39; root&#39; @&#39; 172.18.0.3&#39; (使用密码:YES)在第7行的/var/www/html/index.php中 无法连接到&#39; db&#39;
答案 0 :(得分:0)
要获取任何容器的IP docker inspect <container_name> | grep IPAddress
。使用IP,您将能够在其他容器中进行连接。
答案 1 :(得分:0)
发现问题。这是以下几行:
environment: - MYSQL_ROOT_PASSWORD=wp
这不起作用,而是root密码是“password”。
所以当我连接到mysql容器并运行时:
mysql -h localhost -p -u root wp
使用密码“wp”不起作用,但密码“密码”有效。
所以,似乎env vars不适用于mariadb。它根本没有创建wp wordpress。