这是我的docker-compose.yaml
version: "3.1"
services:
mysql:
image: mysql:8.0.13
container_name: project-mysql
volumes:
- ./docker/data/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: db
MYSQL_USER: dbuser
MYSQL_PASSWORD: secret
ports:
- "3306:3306"
webserver:
image: nginx:alpine
container_name: project-webserver
working_dir: /var/www
volumes:
- .:/var/www
- ./docker/config/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "8080:80"
php-fpm:
build: ./docker/config/php
container_name: project-php-fpm
working_dir: /var/www
volumes:
- .:/var/www
environment:
XDEBUG_CONFIG: remote_host=172.17.0.1
PHP_IDE_CONFIG: serverName=docker
问题是php容器无法连接到mysql。
尽管可以从主机与mycli -h 127.0.0.1 -P 3306 -u root
连接。
但是当我在php容器中执行并尝试时,得到“连接被拒绝”
答案 0 :(得分:1)
您可以与用户root
建立联系。但是,在您的docker-compose文件中,您正在通过用户dbuser
连接。让我知道这不是问题所在。
答案 1 :(得分:1)
您的mysql服务将mysql服务器的端口3306绑定到主机的3306。因此,可以从主机连接是正常的。
在PHP容器内部,localhost
指的是@David Maze在评论中所说的特定容器。
由于您使用的docker-compose
容器位于同一网络中,因此您应该使用服务名称才能连接到mysql服务器。
从php容器尝试此操作
mycli -h mysql -P 3306 -u root
答案 2 :(得分:0)
通常,当请求来自与绑定地址不同的IP时,您拒绝获得连接。尝试以下方法应该可以。
my.cnf
或其他默认配置不会阻止外部连接(请检查
bind-address
在mysql配置中,如果它是127.0.0.1,则为唯一
允许在本地连接表单,我现在将其设置为0.0.0.0或
评论该行(如果存在)
mysqld --verbose --help
=>您将看到所有选项mysqld --verbose --help | grep bind-address
=>检查绑定地址SELECT user,host FROM mysql.user;
)检查您的用户可以
从docker网络=> 172.*
或任何地方=> %