【问题标题】:Mysql - Docker: Connection issueMysql - Docker:连接问题
【发布时间】:2020-03-20 03:57:57
【问题描述】:

我的 docker-compose.yml 看起来像这样:

version: '3.3'

services:

  frontend:
    build: frontend
    container_name: yii-frontend
    ports:
      - 20080:80
    volumes:
      # Re-use local composer cache via host-volume
      - ~/.composer-docker/cache:/root/.composer/cache:delegated
      # Mount source-code for development
      - ./:/app
    networks:
      - my-marian-net

  backend:
    build: backend
    container_name: yii-backend
    ports:
      - 21080:80
    volumes:
      # Re-use local composer cache via host-volume
      - ~/.composer-docker/cache:/root/.composer/cache:delegated
      # Mount source-code for development
      - ./:/app
    networks:
      - my-marian-net

  db:
    image: mysql:8.0
    container_name: mysql8
    command: --user=root --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=verysecret
      - MYSQL_DATABASE=yii2advanced
      - MYSQL_USER=yii2advanced
      - MYSQL_PASSWORD=secret
    ports:
      - 6033:3306
    networks: 
      - my-marian-net

networks: 
  my-marian-net:
    driver: bridge

我收到一条错误消息:

'SQLSTATE[HY000] [2002] php_network_getaddresses:getaddrinfo 失败: 提供节点名或服务名,或未知'

我尝试过的解决方案:

  • 从后端和前端容器 Ping 到 mysql8:docker exec -ti yii-frontend ping mysql8(有效!)

  • 手动将每个容器连接到同一个网络(my-marian-net) docker network connect my-marian-net mysql8(每个容器都一样)

  • 我已连接到 mysql 容器并在那里测试连接,它可以正常工作。

  • 我已经从容器连接到 mysql8 容器 MySQL 服务并且它工作正常。

到目前为止,还没有建立联系。在我的代码中,我使用“db”作为主机名,因为我使用的是桥接模式。

在尝试了不同的解决方案后,我已将问题与连接 在码头外,有什么建议吗?

我正在使用 macOS Mojave。 Docker 版本 19.03

【问题讨论】:

  • 你说,ping mysql8 它有效。那么你没有尝试使用“mysql8”作为主机名而不是“db”?
  • @Smankusors 在连接中你需要使用服务的名字,也就是“db”。我尝试了mysql8以防万一,但没有运气。这个问题似乎是我的本地和桥接网络之间的问题,那里似乎没有通信。
  • 这可能是 Docker 的一些内部 DNS 问题,您的 Docker 版本是多少?您可以尝试重新启动计算机吗?
  • 我在 macos Mojave 中使用 docker 19.03。这可能是一个 dns 问题,但如何测试?
  • 哦,是的,顺便说一句,你的 yii 是如何连接到数据库的?数据库配置?连接字符串?

标签: php mysql docker docker-compose


【解决方案1】:

问题比我想象的要简单,外部容器“db”服务不存在,因此无法连接。

以后当我从本地运行控制台命令时,我会将数据库连接中的主机更改为使用 localhost 而不是“db”,或者连接到容器本身并从内部运行它们。

感谢@Smankusors 的帮助。

【讨论】:

    猜你喜欢
    • 2019-05-24
    • 2020-04-17
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2011-02-16
    相关资源
    最近更新 更多