Docker无法连接到运行docker的MySQL

时间:2019-04-07 12:13:13

标签: mysql docker

我正在使用以下Docker配置:https://github.com/romaricp/kit-starter-symfony-4-docker

我通过以下方式启动环境:

  

docker-compose build

其次:

  

docker-compose up -d

一切运行正常,但是MySQL服务存在问题。我收到一个Symfony错误:

  

“驱动程序发生异常:找不到驱动程序”

以及尝试登录数据库时的PMA错误:

  

mysqli_real_connect():php_network_getaddresses:getaddrinfo失败:   名称无法解析

有什么主意我该怎么做?

docker-compose.yml:

version: '3'
services:
apache:
    build: .docker/apache
    container_name: sf4_apache
    ports:
      - 80:80
    volumes:
      - .docker/config/vhosts:/etc/apache2/sites-enabled
      - .:/home/wwwroot/sf4
    depends_on:
      - php

mysql:
    image: mysql
    container_name: sf4_mysql
    volumes:
        - .docker/data/db:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: sf4
        MYSQL_USER: sf4
        MYSQL_PASSWORD: sf4

php:
    build: .docker/php
    container_name: sf4_php
    volumes:
      - .:/home/wwwroot/sf4
    environment:
      - maildev_host=sf4_maildev
    depends_on:
      - maildev
      - mysql

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: sf4_phpmyadmin
    ports:
        - 8080:80
    links:
        - mysql

maildev:
    image: djfarrelly/maildev
    container_name: sf4_maildev
    ports:
      - 8001:80

我也打开了mysql日志,我看到了:

  

2019-04-07T12:00:30.943414Z 0 [系统] [MY-010931] [服务器] / usr / sbin / mysqld:准备连接。版本:“ 8.0.15”套接字:“ / var / run / mysqld / mysqld.sock”端口:3306 MySQL社区服务器-GPL。

也许端口错误,这就是为什么我无法连接?

3 个答案:

答案 0 :(得分:1)

对于phpmyadmin服务,我认为您应像这样设置PMA_HOSTPMA_PORT环境变量:

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: sf4_phpmyadmin
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
    ports:
        - 8080:80
    links:
        - mysql

您的mysql容器应在开始时带有command指令以设置身份验证插件(mysql 8的连接器存在问题),更多详细信息here

mysql:
    image: mysql
    container_name: sf4_mysql
    command: "--default-authentication-plugin=mysql_native_password"
    volumes:
        - .docker/data/db:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: sf4
        MYSQL_USER: sf4
        MYSQL_PASSWORD: sf4

在您的Symfony应用中,连接字符串位于.env文件中,并且应具有以下格式:

  

DATABASE_URL = mysql:// mysql_user mysql_user_password @ mysql_host mysql_port / db_name < / strong>

     

mysql_user :您的mysql用户(例如:root)

     

mysql_user_password :用户的密码(例如:root)

     

mysql_host :应包含您的mysql容器服务名称   位于您的docker-compose.yml文件中(在这种情况下为mysql)

     

mysql_port :mysql容器内部端口(在这种情况下为3306)

     

db_name :您要连接的数据库。

DATABASE_URL如下所示:

DATABASE_URL=mysql://root:root@mysql:3306/sf4

在进行这些更改后停止容器,然后重新启动。

希望这会有所帮助。

答案 1 :(得分:0)

您必须公开mysql端口3306:

  mysql:
    image: mysql
    container_name: sf4_mysql
    volumes:
    - .docker/data/db:/var/lib/mysql
    restart: always
    ports:
    - "3306:3306"
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: sf4
        MYSQL_USER: sf4
        MYSQL_PASSWORD: sf4
    networks:
    - default

答案 2 :(得分:0)

我认为您在链接容器时遇到问题。我建议您使用Coustom网络而不是链接。所有容器都能看到对方