无法连接到docker镜像内的MySQL

时间:2017-03-19 07:56:03

标签: mysql symfony docker

我已经找到了一些关于这个主题的线索,但没有一个能够帮助我,因为我已经提供了解决方案,或者问题与我的不完全相同

我有一个带有nginx / php-fpm等服务器的docker环境,并且正在使用我链接到另一台服务器的官方mysql映像。这是我的docker-compose

db:
    image: mysql
    ports:
    - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=symfonyrootpass
      - MYSQL_DATABASE=symfony
      - MYSQL_USER=symfony
      - MYSQL_PASSWORD=symfonypass

project:
    image: docker.io/project/project-dev
    ports:
    - "80:80"
    environment:
      - XDEBUG_HOST=${LOCAL_IP}
      - XDEBUG_PORT=9000
      - XDEBUG_REMOTE_MODE=req
    links:
    - db
    volumes:
    - ../project:/var/www/app

当我启动它并从我的主机连接时:mysql -h127.0.0.1 -usymfony -psymfonypass然后使用use symfony;它可以正常工作。我看到了我的数据库,我可以编辑,删除,更新等等。我可以做任何事情。

但是,我不能对码头工作者说同样的话。我正在使用Symfony,当我正确设置参数时,我总是收到错误

  

驱动程序中发生异常:SQLSTATE [HY000] [2002]拒绝连接

这些是我的参数

database_host: 127.0.0.1
database_port: null
database_name: symfony
database_user: symfony
database_password: symfonypass

我已尝试将database_host更改为localhost,但后来我收到了错误No such file or directory,其中包含相同的SQLSTATE。我还尝试将端口设置为3306,但这也没有帮助。

从docker内部访问我的数据库需要做什么?

这是我描述我的mysql连接的config.yml中的部分

学说配置

doctrine:
    dbal:
        driver:   pdo_mysql
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        server_version: "%database_version%"

1 个答案:

答案 0 :(得分:3)

您的数据库在与项目不同的容器中运行。 Docker-compose会为它提供一个IP地址和一个主机名,即 db ,因为这就是你的命名方式。因此, database_host 不应该是127.0.0.1或localhost,而是 db