Symfony 4 "Connection refused" 尝试连接到 docker mysql 容器
Symfony 4 "Connection refused" while trying to connect to docker mysql container
我的问题是如何配置与 mysql 容器的连接。
这是我的docker-compose.yml
version: '3'
services:
php:
build: ./php-fpm
volumes:
- ./iym:/var/www/iym
- ./php-fpm/php.ini:/usr/local/etc/php/php.ini
depends_on:
- mysql
web:
build: ./nginx
ports:
- "8888:80"
volumes:
- ./iym:/var/www/iym
- ./nginx/iym.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
mysql:
image: mysql:5.6
restart: always
command: --default-authentication-plugin=mysql_native_password
volumes:
- ${DB_PATH_HOST}:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "symf0ny"
ports:
- "3306:3306"
这是我在 .env 文件
中的 DATABASE_URL
DATABASE_URL=mysql://root:symf0ny@127.0.0.1:3306/iym
当我尝试 运行 php bin/console doctrine:database:create
时,我收到类似“SQLSTATE[HY000] [2002] Connection refused
”的错误。 OS - ubuntu 18.04。我应该怎么做才能连接到数据库?非常感谢!
我假设您正在尝试从 docker-compose 中定义的另一个 container/service 进行连接,并且您使用的是 docker-compose 的当前版本(2.4 或3.7)
你需要改变
DATABASE_URL=mysql://root:symf0ny@127.0.0.1:3306/iym
到
DATABASE_URL=mysql://root:symf0ny@mysql:3306/iym
原因是 127.0.0.1
指的是 php 运行 所在机器的本地主机。在本例中,它是 php 的容器本地主机。但是数据库没有运行。它 运行 在另一个 docker 容器中,可以在服务名称下访问,在本例中为 mysql
。
在docker-compose networking docs中写着:
By default Compose sets up a single network for your app. Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name.
但是,服务可以在容器名称(自动生成到 projectName_serviceName_1
(项目名称默认文件夹名称开始))下发现,但也可以在服务名称下发现,link and service alias 如果已定义。我建议尽可能使用服务名称。
我的问题是如何配置与 mysql 容器的连接。
这是我的docker-compose.yml
version: '3'
services:
php:
build: ./php-fpm
volumes:
- ./iym:/var/www/iym
- ./php-fpm/php.ini:/usr/local/etc/php/php.ini
depends_on:
- mysql
web:
build: ./nginx
ports:
- "8888:80"
volumes:
- ./iym:/var/www/iym
- ./nginx/iym.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
mysql:
image: mysql:5.6
restart: always
command: --default-authentication-plugin=mysql_native_password
volumes:
- ${DB_PATH_HOST}:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "symf0ny"
ports:
- "3306:3306"
这是我在 .env 文件
中的 DATABASE_URLDATABASE_URL=mysql://root:symf0ny@127.0.0.1:3306/iym
当我尝试 运行 php bin/console doctrine:database:create
时,我收到类似“SQLSTATE[HY000] [2002] Connection refused
”的错误。 OS - ubuntu 18.04。我应该怎么做才能连接到数据库?非常感谢!
我假设您正在尝试从 docker-compose 中定义的另一个 container/service 进行连接,并且您使用的是 docker-compose 的当前版本(2.4 或3.7)
你需要改变
DATABASE_URL=mysql://root:symf0ny@127.0.0.1:3306/iym
到
DATABASE_URL=mysql://root:symf0ny@mysql:3306/iym
原因是 127.0.0.1
指的是 php 运行 所在机器的本地主机。在本例中,它是 php 的容器本地主机。但是数据库没有运行。它 运行 在另一个 docker 容器中,可以在服务名称下访问,在本例中为 mysql
。
在docker-compose networking docs中写着:
By default Compose sets up a single network for your app. Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name.
但是,服务可以在容器名称(自动生成到 projectName_serviceName_1
(项目名称默认文件夹名称开始))下发现,但也可以在服务名称下发现,link and service alias 如果已定义。我建议尽可能使用服务名称。