Docker MySQL无法连接容器。

11

我有一个用于创建mysql镜像并将端口暴露到3306的docker-compose文件,但是当我尝试安装CMS时,它给出了无法连接到数据库的错误。我尝试扫描3306端口,它显示端口已打开,因此mysql正在运行。

为什么两个docker容器看不到彼此?

这是我的docker-compose文件:

phpfpm:
  restart: always
  extends:
    file: php-fpm-5.6.yml
    service: phpfpm
  links:
    - db:db

nginx:
  restart: always
  image: nginx
  ports:
    - "8000:80"
  links:
    - phpfpm:phpfpm
  volumes:
    - ./nginx/vhost.conf:/etc/nginx/conf.d/default.conf
    - ./app:/var/www/html
    - ./log/nginx:/var/log/nginx

db:
  restart: always
  image: mysql
  ports:
    - "3306:3306"
  environment:
    MYSQL_ROOT_PASSWORD: 123456
    MYSQL_USER: user
    MYSQL_PASSWORD: password
    MYSQL_DATABASE: database

我在服务器上尝试并使用固定IP,一切正常。但是本地主机/127.0.0.1有什么问题吗? - ZeroByte
1个回答

27

要连接数据库,请使用您提供的链接/别名作为主机名。 因此,您的CMS可以使用db作为主机名并使用端口3306连接到MySQL。

您无法连接到localhost或127.0.0.1,因为“localhost”是每个容器内部的本地主机,因此在phpfpm容器中使用“localhost”将尝试连接到phpfpm容器内部的MySQL数据库,但是那里没有运行服务器。

请注意,如果您仅从关联的容器内部连接到数据库,则不必发布"3306":"3306")MySQL端口。 发布端口会将MySQL暴露在公共网络接口上,这可能是“互联网”


3
我将"localhost"替换为"db",已解决问题。感谢您的时间和帮助 :) - ZeroByte
谢谢提醒不需要发布端口,这导致了我的连接问题。 - mfink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接