我在Symfony中经验丰富,但对Docker来说很新,而且我有一个“连接拒绝错误”,我无法解决。Symfony + Docker,拒绝连接
敢肯定这是一个初学者的错误,并且这里的解决方案是非常简单的...
这里是我的docker-compose
文件的内容:
version: '3.2'
services:
cg-demo:
build: docker/cg-demo
container_name: cg-demo
working_dir: /var/www/html
volumes:
- .:/var/www/html
- ./docker/demo/vhost.conf:/etc/apache2/sites-available/000-default.conf:ro
- ./docker/demo/php.ini:/usr/local/etc/php/php.ini:ro
- ~/.ssh:/var/www/.ssh
- ~/.composer:/var/www/.composer
environment:
- SYMFONY_ENV
- DOMAIN_NAME: cg-demo.docker
- VIRTUAL_HOST: cg-demo.docker
depends_on:
- database
env_file: .env
ports:
- 8000:80
database:
image: percona:5.6
ports:
- 3306:3306
expose:
- 3306
container_name: cg-demo-database
volumes:
- /docker/database:/etc/mysql/conf.d
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: demo
tmpfs:
- /var/lib/mysql
- /tmpfs:size=300M
这是基于从另一个项目作品,但我不知道这里发生的一切......
我也有一个phpmyadmin容器,这里没有显示。 PhpMyAdmin可以正确连接到数据库,并且可以在任何Web服务器上使用而不会有问题。然而,当涉及到symfony的容器,我有这样的时尝试使用数据库:
[Doctrine\DBAL\Exception\ConnectionException]
An exception occured in driver: SQLSTATE[HY000] [2002] Connection refused
[Doctrine\DBAL\Driver\PDOException]
SQLSTATE[HY000] [2002] Connection refused
[PDOException]
SQLSTATE[HY000] [2002] Connection refused
连接信息如下,在.env
文件:
# Database credentials
DATABASE_HOST=database
DATABASE_PORT=3306
DATABASE_USER=root
DATABASE_PASSWORD=root
DATABASE_DB=cg-demo
调用docker ps
给我这个:
CONTAINER ID IMAGE COMMAND
CREATED STATUS PORTS NAMES
16a67dadeebb phpmyadmin/phpmyadmin "/run.sh phpmyadmin" 15 minutes ago Up 15 minutes 0.0.0.0:8001->80/tcp cg.phpmyadmin.docker
8bd783aa1dd1 cg_cg-demo "entrypoint.sh apa..." 15 minutes ago Up 15 minutes 0.0.0.0:8000->80/tcp cg-demo
2fc7cd9105ba percona:5.6 "docker-entrypoint..." 15 minutes ago Up 15 minutes (healthy) 3306/tcp cg-database
我从演示容器试图ping database
和它的作品...
EDIT 1:
添加以下到数据库容器:
ports:
- 3306:3306
编辑2:
移除来自所有容器下列:
networks:
- default
编辑3:
我的教训配置app/config/config.yml
:
dbal:
host: "%env(DATABASE_HOST)%"
port: "%env(DATABASE_PORT)%"
dbname: "%env(DATABASE_DB)%"
user: "%env(DATABASE_USER)%"
password: "%env(DATABASE_PASSWORD)%"
charset: UTF8
mapping_types:
enum: string
server_version: 5.6
编辑4:
添加以下的数据库配置:
expose:
- 3306
你必须公开端口为mysql,就像你使用'cg-demo'服务 –
感谢您的反馈。这个帖子被更新了(仍然不起作用) – Zephyr
还有一件事,我有类似的问题,我从服务中删除了“网络”属性,它起作用 –