gpt4 book ai didi

mysql - docker nodejs容器无法连接mysql容器

转载 作者:行者123 更新时间:2023-11-29 10:57:01 25 4
gpt4 key购买 nike

我正在 Digital Ocean 中运行 Docker 服务器。我有两个容器 Nodejs 和 Mysql。 Mysql容器已开放端口3306。

当尝试通过 Docker Server ip + 端口通过nodejs访问mysql时。我收到错误:连接 ETIMEDOUT。

当我在本地计算机上运行相同的nodejs docker 设置时,它工作正常。我缺少什么吗?

这是nodejs docker-composer.yml:

version: '2'
services:
test-web-install:
image: example-nodejs:latest
working_dir: /home/app
volumes:
- ./:/home/app
command: sh -c 'nodemon'
environment:
- NODE_ENV=development
- DB_HOST=192.168.11.207 #or public ip in internet
- DB_PORT=3036
- DB_PASSWORD=root
- DB_USER=root
- DB_DATABASE=root
ports:
- "3000:3000"

这是 mysql 的 docker-composer.yml

mysql:
container_name: flask_mysql
restart: always
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: 'root' # TODO: Change this
MYSQL_USER: 'root'
MYSQL_PASS: 'root'
MYSQL_DATABASE: 'root'
volumes:
- ./data:/var/lib/mysql
ports:
- "3036:3306"
restart: always

最佳答案

随着我们的进展,我将修改答案 - 根据您的评论,虽然我无法访问您的环境,但让我们尝试逐步解决此问题:

  1. 让数据库对 Node.js 服务器可见
  2. 了解它是如何工作的,然后可能会深入了解 env 网络配置。

有两种方法可以解决第一个问题,也可能是第二个问题,正如我所见,无法触及您的环境:

第一种方法将确保服务器看到数据库,但是如果您无法从外部连接到数据库,则似乎存在防火墙/droplet网络配置问题,您可以尝试第二种方法(不太可能改变,但最好尝试)。这假设您使用相同的 docker compose 和相同的网桥自定义网络:

version: '2'
services:
test-web-install:
image: example-nodejs:latest
working_dir: /home/app
volumes:
- ./:/home/app
command: sh -c 'nodemon'
environment:
- NODE_ENV=development
- DB_HOST= mysql
- DB_PORT=3036
- DB_PASSWORD=root
- DB_USER=root
- DB_DATABASE=root
ports:
- "3000:3000"
networks:
inner:
alias: server
mysql:
container_name: flask_mysql
restart: always
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: 'root' # TODO: Change this
MYSQL_USER: 'root'
MYSQL_PASS: 'root'
MYSQL_DATABASE: 'root'
volumes:
- ./data:/var/lib/mysql
ports:
- "<externalEnvIp>:3036:3306"
restart: always
networks:
inner:
alias: mysql
networks:
inner:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "true"
com.docker.network.bridge.enable_ip_masquerade: "true"
ipam:
driver: default
config:
- subnet: 172.16.100.0/24
gateway: 172.16.100.1

选项 2:

version: '2'
services:
test-web-install:
image: example-nodejs:latest
working_dir: /home/app
volumes:
- ./:/home/app
command: sh -c 'nodemon'
environment:
- NODE_ENV=development
- DB_HOST= mysql
- DB_PORT=3036
- DB_PASSWORD=root
- DB_USER=root
- DB_DATABASE=root
ports:
- "3000:3000"
network_mode: "host"
mysql:
container_name: flask_mysql
restart: always
image: mysql:5.6
environment:
MYSQL_ROOT_PASSWORD: 'root' # TODO: Change this
MYSQL_USER: 'root'
MYSQL_PASS: 'root'
MYSQL_DATABASE: 'root'
volumes:
- ./data:/var/lib/mysql
ports:
- "3036:3306"
restart: always
network_mode: "host"

更精确的解决方案(找到问题的根源)将涉及深入挖掘您的环境网络配置、docker 网络设置等,但这些解决方案目前可能会帮助并解决您的问题。

请尝试后输出结果。

关于mysql - docker nodejs容器无法连接mysql容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42879022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com