无法通过PHP连接到docker mysql

我有两个容器的docker-compose设置:一个是php / apache服务,另一个容器是数据库(mysql)。

这是我的docker-compose.yml

version: '2'
services:
   app:
     depends_on:
       - db
     links:
       - db:mysql
     build: .
     image: app
     ports:
       - "80:80"
     restart: always
     links:
       - db:db
     volumes:
       - ../:/var/www/html/

   db:
     image: mysql:latest
     restart: unless-stopped
     volumes:
       - ./db_data:/var/lib/mysql
       - ./databaseDumps:/tmp/databaseDumps
     environment:
       MYSQL_USER: "myApp"
       MYSQL_PASSWORD: "root"
       MYSQL_ROOT_PASSWORD: "root"
       MYSQL_DATABASE: "myAppDatabase"
       MYSQL_ROOT_HOST: "%"

这里是我的应用程序Dockerfile:

FROM php:7-apache

COPY prefilled_files/000-default.conf /etc/apache2/sites-available/000-default.conf
RUN apt-get -qq update
RUN apt-get -qq -y install libpng-dev curl git nano vim zip unzip mysql-client libmysqlclient-dev
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get install -y nodejs
RUN npm install -g bower
RUN npm install -g gulp
RUN docker-php-ext-install pdo pdo_mysql gd mysqli
EXPOSE 8080 80

主要的问题是,mysql数据库和应用程序容器运行良好,我可以通过应用程序容器连接到mysql数据库

$root@app: mysql -h db -u myApp -p

如果我尝试在我的symfony项目上执行composer install ,则会显示以下错误消息:

 [DoctrineDBALDriverPDOException]        
  SQLSTATE[HY000] [2002] Connection refused  



  [PDOException]                             
  SQLSTATE[HY000] [2002] Connection refused  

这是我的应用程序的参数:

parameters:
    database_driver: pdo_mysql
    database_host: db
    database_port: 3306
    database_name: myAppDatabase
    database_user: myApp
    database_password: root

这是为什么发生? 我已经阅读了几个论坛和网站,但没有任何帮助。 我尝试了以下解决方案,没有任何帮助:

  • 清除symfony缓存;)
  • 在mysql容器上暴露3306
  • 链接应用程序和MySQL容器在一起
  • 从我的电脑中删除所有图像和容器,并重新安装所有内容
  • 我在Windows和Ubuntu 17.04上试过。 同样的行为
  • 连接到docker-compose mysql容器会拒绝访问,但运行相同映像的docker不会

    docker-compose wordpress mysql连接被拒绝

    更新:

    我试图通过https://gist.github.com/chales/11359952上的一个小脚本访问我的数据库。 PHP / My Script实际上可以连接到数据库 ,所以问题必须与我的composer install或教条或symfony的配置中。

    TL;博士

  • 2码头集装箱通过码头组成
  • 我可以通过应用程序容器上的mysql命令访问数据库,但不能通过composer install 。 为什么?

  • 我认为这是它试图通过主机名'db'找到容器的方式,我发现在运行docker的机器上,它似乎没有拿起guest容器的名称(可能是一些DNS配置你可以改变),但是我的工作方式是找到MySQL容器的IP地址。 我有docker_db_1作为MySQL的容器名称,所以我运行(假设* nix)

    docker inspect docker_db_1 | grep IPAddress
    

    在我的情况下给我

        "SecondaryIPAddresses": null,
        "IPAddress": "",
                "IPAddress": "172.18.0.2",
    

    我使用这个IP地址( 172.18.0.2 )连接到数据库而不是数据库。

    链接地址: http://www.djcxy.com/p/96651.html

    上一篇: Cannot connect via PHP to docker mysql

    下一篇: buddy: generate classes with cyclic types