关于docker-compose内连接数据库的疑问

如图,这是docker-compose配置文件
clipboard.png

现在运行

clipboard.png

后,我在docker外通过redis-climysql可以正常连接到容器内的redis 和 mysql,如下图

clipboard.png

clipboard.png

可是我的web服务中,如论如何都连接不到mysql,报错如下:

clipboard.png

问了很多人,经过指导,在web服务里的host应该写docker-compose配置文件中的service名,如下图

clipboard.png

可是并没有什么帮助,还是报上图的错误,已经纠结了一天了,求助

阅读 8.5k
3 个回答

现在mysql的最新镜像是8.0,建议使用5.7.22试试,另外compose里建议使用网络别名直接别名当作连接目标的host来使用docker的网络里维持的dns

你的问题排查的话去web容器里ping下mysql的服务名看能返回ip否,或者docker run -ti --rm --net:container:web的容器id zhangguanzhang/alpine sh来使用web容器同一个network namespace去排查
进去后telnet mysql 3389看看是否能通

报错提示“Client does not support authentication protocol"。
看你配置,应该是你在node web内的服务器配置有问题吧,你的mysql配置是有root用户和密码的,建议你把这些都写到你的nodejs配置里。

也可以通过mysql链接后创建用户和密码。以下示例代码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'

docker-compose 添加定义下 networks :

version: '3'
services: 
  web:
    networks: # 自定义网络
      - my-network
      
  mysql:
    networks: # 同一个网络
      - my-network
          
networks:          
  my-network:      
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题