【问题标题】:ERROR 2002 (HY000): Can't connect to MySQL server on 'db' (115)错误 2002 (HY000): 无法连接到 'db' 上的 MySQL 服务器 (115)
【发布时间】:2022-01-15 02:01:35
【问题描述】:

我正在尝试将现有项目移至 Docker。我在M.Academy 遵循本教程并遵循Docker on Existing Project 的设置说明

在执行尝试连接 MySQL 时,我收到此错误 ERROR 2002 (HY000): Can't connect to MySQL server on 'db' (115)

我也试过执行:telnet db 3306

回应: 正在尝试 172.17.0.1... telnet:无法连接到远程主机:连接超时

我尝试了所有方法,但无法找出问题所在。我是 Docker 新手。我正在使用 Ubuntu 18.04 LTE。在导入数据库之前没有更改 db.env 并且在任何其他步骤中都没有错误。

我进一步检查发现容器无法与MySQL建立连接。

附:我可以通过使用(外部 MySQL 端口)mysql -h 127.0.01 -u root -p -P 3306

成功地连接到 Docker 容器外的相同 MySQL 服务

复制步骤

  1. 在 Ubuntu 18.04 上安装 Docker 和 Docker Compose
  2. 下载 Docker Compose 模板:curl -s https://raw.githubusercontent.com/markshust/docker-magento/master/lib/template | bash
  3. 替换为现有 Magento 实例的现有源代码:cp -R ~/Sites/existing src
  4. 执行:docker-compose -f docker-compose.yml up -d
  5. 将文件复制到容器:bin/copytocontainer --all
  6. 导入现有数据库:bin/mysql < /var/www/magento243.sql

预期结果 数据库应该已经成功导入

实际结果 错误 2002 (HY000): 无法连接到 'db' (115) 上的 MySQL 服务器

附:问题已经在这里提出:https://github.com/markshust/docker-magento/issues/589

docker-compose.yml

version: "3"

services:
  app:
    image: markoshust/magento-nginx:1.18-5
    ports:
      - "80:8000"
      - "443:8443"
    depends_on:
      - "db"
    volumes: &appvolumes
      - ~/.composer:/var/www/.composer:cached
      - ~/.ssh/id_rsa:/var/www/.ssh/id_rsa:cached
      - ~/.ssh/known_hosts:/var/www/.ssh/known_hosts:cached
      - appdata:/var/www/html
      - sockdata:/sock
      - ssldata:/etc/nginx/certs
    extra_hosts: &appextrahosts
      ## M1 Mac support to fix Docker delay, see #566
      - "app:172.17.0.1"
      - "phpfpm:172.17.0.1"
      - "db:172.17.0.1"
      - "redis:172.17.0.1"
      - "elasticsearch:172.17.0.1"
      - "rabbitmq:172.17.0.1"
      ## Selenium support, replace "magento.test" with URL of your site
      - "magento.test:172.17.0.1"

  phpfpm:
    image: markoshust/magento-php:7.4-fpm-11
    volumes: *appvolumes
    extra_hosts: *appextrahosts
    env_file: env/phpfpm.env

  db:
    image: mariadb:10.4
    command: --max_allowed_packet=256M
    ports:
      - "3306:3306"
    env_file: env/db.env
    volumes:
      - dbdata:/var/lib/mysql
    extra_hosts: *appextrahosts

  redis:
    image: redis:5.0-alpine
    ports:
      - "6379:6379"
    extra_hosts: *appextrahosts

  elasticsearch:
    image: markoshust/magento-elasticsearch:7.9.3-1
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - "discovery.type=single-node"
      ## Set custom heap size to avoid memory errors
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      ## Avoid test failures due to small disks
      ## More info at https://github.com/markshust/docker-magento/issues/488
      - "cluster.routing.allocation.disk.threshold_enabled=false"
      - "index.blocks.read_only_allow_delete"
    extra_hosts: *appextrahosts

  rabbitmq:
    image: rabbitmq:3.8.22-management-alpine
    ports:
      - "15672:15672"
      - "5672:5672"
    volumes:
      - rabbitmqdata:/var/lib/rabbitmq
    environment:
      - RABBITMQ_VM_MEMORY_HIGH_WATERMARK=1GB
    extra_hosts: *appextrahosts

  mailcatcher:
    image: sj26/mailcatcher
    ports:
      - "1080:1080"
    extra_hosts: *appextrahosts

  ## Selenium support, uncomment to enable
  #selenium:
  #  image: selenium/standalone-chrome-debug:3.8.1
  #  ports:
  #    - "5900:5900"
  #  extra_hosts: *appextrahosts

volumes:
  appdata:
  dbdata:
  rabbitmqdata:
  sockdata:
  ssldata:

【问题讨论】:

  • 您能否编辑问题以包含您正在使用的实际源代码,尤其是docker-compose.yml 文件? “克隆这个存储库然后进行一些更改”是一个有点难以遵循的秘诀;尝试提供一个minimal reproducible example,它不需要在问题之外查看以了解如何重现它。
  • @DavidMaze 感谢您强调这一点。用 docker-compose.yml 更新了我的问题
  • 那些extra_hosts: 块是奇数;他们用指向任意IP地址的指针覆盖DNS service Compose provides you by default。删除所有 extra_hosts: 块有帮助吗?
  • @DavidMaze - 这没用

标签: mysql linux docker magento


【解决方案1】:

这个问题终于解决了

  1. 从 YML 文件中删除 extra_hosts 条目
  2. 在 YML 中添加网络

最终docker-compose.yml

version: "3"

services:
  app:
    image: markoshust/magento-nginx:1.18-5
    ports:
      - "81:8000"
      - "444:8443"
    depends_on:
      - "db"
    volumes: &appvolumes
      - ~/.composer:/var/www/.composer:cached
      - ~/.ssh/id_rsa:/var/www/.ssh/id_rsa:cached
      - ~/.ssh/known_hosts:/var/www/.ssh/known_hosts:cached
      - appdata:/var/www/html
      - sockdata:/sock
      - ssldata:/etc/nginx/certs
    networks:
      - customNetwork

  phpfpm:
    image: markoshust/magento-php:7.4-fpm-11
    volumes: *appvolumes
    env_file: env/phpfpm.env
    networks:
      - customNetwork

  db:
    image: mariadb:10.4
    command: --max_allowed_packet=256M
    ports:
      - "3307:3306"
    env_file: env/db.env
    volumes:
      - dbdata:/var/lib/mysql
    networks:
      - customNetwork

  redis:
    image: redis:5.0-alpine
    ports:
      - "6379:6379"
    networks:
      - customNetwork

  elasticsearch:
    image: markoshust/magento-elasticsearch:7.9.3-1
    ports:
      - "9201:9200"
      - "9301:9300"
    environment:
      - "discovery.type=single-node"
      ## Set custom heap size to avoid memory errors
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      ## Avoid test failures due to small disks
      ## More info at https://github.com/markshust/docker-magento/issues/488
      - "cluster.routing.allocation.disk.threshold_enabled=false"
      - "index.blocks.read_only_allow_delete"
    networks:
      - customNetwork

  rabbitmq:
    image: rabbitmq:3.8.22-management-alpine
    ports:
      - "15672:15672"
      - "5672:5672"
    volumes:
      - rabbitmqdata:/var/lib/rabbitmq
    environment:
      - RABBITMQ_VM_MEMORY_HIGH_WATERMARK=1GB
    networks:
      - customNetwork

  mailcatcher:
    image: sj26/mailcatcher
    ports:
      - "1080:1080"
    networks:
      - customNetwork

volumes:
  appdata:
  dbdata:
  rabbitmqdata:
  sockdata:
  ssldata:

networks:
  customNetwork:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2021-01-16
    • 2013-03-05
    • 2019-01-26
    • 2014-11-27
    • 2012-07-30
    相关资源
    最近更新 更多