Docker can';t连接到运行docker compose的MySQL

Docker can';t连接到运行docker compose的MySQL,mysql,docker,Mysql,Docker,我正在使用此Docker配置: 我使用以下方法启动环境: docker组合构建 其次是: docker compose up-d 一切正常,但MySQL服务存在问题。我得到一个Symfony错误: “驱动程序中发生异常:找不到驱动程序” 以及我尝试登录DB时的PMA错误: mysqli\u real\u connect():php\u network\u getaddresses:getaddrinfo失败: 名称无法解析 你知道我该怎么做吗 docker-compose.yml: versio

我正在使用此Docker配置:

我使用以下方法启动环境:

docker组合构建

其次是:

docker compose up-d

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

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

以及我尝试登录DB时的PMA错误:

mysqli\u real\u connect():php\u network\u 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][Server]/usr/sbin/mysqld:准备好连接了。版本:“8.0.15”套接字:“/var/run/mysqld/mysqld.sock”端口:3306 MySQL社区服务器-GPL


可能端口错误,这就是我无法连接的原因

您必须公开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

我想你连集装箱都有问题。我建议您使用自定义网络而不是链接。对于
phpmyadmin
服务,所有容器都可以看到彼此,我认为您应该设置
PMA\u主机
PMA\u端口
这样的环境变量:

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: sf4_phpmyadmin
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
    ports:
        - 8080:80
    links:
        - mysql
mysql容器应该在开始时有
命令
指令来设置身份验证插件(mysql 8的连接器有问题),更多详细信息

在Symfony应用程序中,连接字符串位于
.env
文件中,其格式如下:

DATABASE\u URL=mysql://mysql\u用户mysql\u用户密码mysql\u主机mysql\u端口/db\u名称

mysql\u user:您的mysql用户(例如:root)

mysql\u user\u password:用户的密码(例如:root)

mysql\u主机:应该包含您的mysql容器服务名称 位于您的
docker compose.yml
文件中(本例中为mysql)

mysql\u端口:mysql容器内部端口(本例中为3306)

db_name:要连接到的数据库

数据库URL可以如下所示:

DATABASE_URL=mysql://root:root@mysql:3306/sf4
在这些更改后停止容器并重新启动它们


希望这会有所帮助。

这样我会得到一个错误:{“消息”:“驱动程序未能在端点sf4_mysql上编程外部连接(4C503802716B745C59590BF6A5B25B6D3B24C31DDD2618B3F8B380AC677442):绑定0.0.0:3306失败:端口已分配”}您的3306已被主机中的另一个服务使用,请尝试
“3307:3306”
,或者保持原样并停止主机中的mysql服务。尝试:docker compose down&docker compose up-d更多信息:关于此问题。尝试重新启动,未发生任何更改,也将docker上的mysql端口更改为3307:3306,未发生任何更改。好主意@Abdelkarimel。停止其他mysql服务;)尝试了您的设置,这样我在尝试登录到PMA时收到一个客户端未知的服务器请求的身份验证方法[caching_sha2_password]错误。另外,Symfony也无法联系数据库。我将.env数据库凭据更改为数据库\u URL=mysql://sf4:root@mysql:3306/SF4同样的错误。如果正确,我的登录凭据应该是sf4/root。基于Docker环境参数。Docker-compose.yml(mysql服务)
命令中缺少这一行:“--default authentication plugin=mysql\u native\u password”
同样的事情,我在更改后运行Docker compose down和Docker compose up-d,错误相同。
DATABASE_URL=mysql://root:root@mysql:3306/sf4