Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql容器连接被拒绝_Mysql_Symfony_Docker - Fatal编程技术网

mysql容器连接被拒绝

mysql容器连接被拒绝,mysql,symfony,docker,Mysql,Symfony,Docker,我有一个带有mysql服务的docker compose,当我与mysql workbench建立连接时,它可以正常工作,但是当我尝试连接我的symfony应用程序时,它会抛出一个连接拒绝错误 主机、端口、用户和密码设置正确 这是我的作文: version: "3.1" services: mysql: build: context: . dockerfile: docker/mysql/Dockerfile restart: always

我有一个带有mysql服务的docker compose,当我与mysql workbench建立连接时,它可以正常工作,但是当我尝试连接我的symfony应用程序时,它会抛出一个连接拒绝错误

主机、端口、用户和密码设置正确

这是我的作文:

version: "3.1"

services:

  mysql:
    build:
      context: .
      dockerfile: docker/mysql/Dockerfile
    restart: always
    working_dir: /app
    volumes:
      - .data:/usr/data
    environment:
      - MYSQL_ROOT_PASSWORD=000000
      - MYSQL_DATABASE=my_database
      - MYSQL_USER=admin
      - MYSQL_PASSWORD=000000
    ports:
      - "3200:3306"

  webserver:
    image: nginx:alpine
    working_dir: /app
    volumes:
      - .:/app
      - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
      - '8000:80'
    depends_on:
      - php-fpm

  php-fpm:
    build: docker/php-fpm
    working_dir: /app
    volumes:
      - .:/app
      - ./docker/php-fpm/php-ini-overrides.ini:/etc/php/7.3/fpm/conf.d/99-overrides.ini
    links:
      - mysql
    depends_on:
      - mysql
这是mysql的dockerfile:

FROM mysql:5.7


ENV MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
ENV MYSQL_DATABASE=${MYSQL_DATABASE}
ENV MYSQL_USER=${MYSQL_USER}
ENV MYSQL_PASSWORD=${MYSQL_PASSWORD}

COPY ./docker/mysql/my_database.sql /docker-entrypoint-initdb.d/init.sql

EXPOSE 3306
这是我的symfony配置参数:

parameters:
    database_driver: pdo_mysql
    database_host: mysql
    database_port: 3200
    database_name: my_database
    database_user: admin
    database_password: '000000'
这就是所抛出的错误:

"exception": {
        "message": "An exception occured in driver: SQLSTATE[HY000] [2002] Connection refused",
        "code": 0,
        "previous": {
            "message": "SQLSTATE[HY000] [2002] Connection refused",
            "code": 2002,
            "previous": {
                "message": "SQLSTATE[HY000] [2002] Connection refused",
                "code": 2002,
                "trace": [
                    {
                        "namespace": "",
                        "short_class": "",
                        "class": "",
                        "type": "",
                        "function": "",
                        "file": "/app/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php",
                        "line": 43,
                        "args": []
                    },
                    {
                        "namespace": "",
                        "short_class": "PDO",
                        "class": "PDO",
                        "type": "->",
                        "function": "__construct",
                        "file": "/app/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php",
                        "line": 43,
                        "args": [
                            [
                                "string",
                                "mysql:host=mysql;port=3200;dbname=my_database;charset=UTF8;"
                            ],
                            [
                                "string",
                                "admin"
                            ],
                            [
                                "string",
                                "000000"
                            ],
                            [
                                "array",
                                []
                            ]
                        ]
                    }

有什么问题吗?

当您公开mysql容器的端口3306并将其映射到端口3200时,这意味着外部世界应该使用端口3200访问它。但是使用相同网络的其他容器必须使用端口3306。

当您公开mysql容器的端口3306并将其映射到端口3200时,这意味着外部世界应该使用端口3200访问它。但是使用相同网络的其他容器必须使用端口3306。

您正在从Symphony连接到端口3200,而MySQL配置为在3306上运行。您还将Docker定义为公开3306而不是3200。嗨,Docker将端口映射到3200,我可以使用端口3200连接到数据库whit workbench是的,但是您将3200从外部映射到内部。在Docker内部,您将其公开为3306;谢谢你,伙计,你完全正确,我不知道,非常感谢你的帮助。你从Symphony连接到3200端口,而MySQL配置为在3306上运行。您还将Docker定义为公开3306而不是3200。嗨,Docker将端口映射到3200,我可以使用端口3200连接到数据库whit workbench是的,但是您将3200从外部映射到内部。在Docker内部,您将其公开为3306;谢谢你,你是绝对正确的,我不知道,非常感谢你的帮助。哇,我不知道,非常感谢你,现在它的工作完美。我登录只是为了+1你的答案!!!它解决了我的问题。我只是没有意识到,在同一个网络中,重要的是docker端口,而不是暴露端口。哇,我不知道,非常感谢,现在它工作得很好。我登录只是为了+1你的答案!!!它解决了我的问题。我只是没有意识到,在同一个网络中,重要的是docker端口,而不是暴露的端口。