【发布时间】:2017-08-10 06:43:40
【问题描述】:
我在 Digital Ocean 中运行 Docker 服务器。我有两个容器 Nodejs 和 Mysql。 Mysql 容器开放了 3306 端口。
当尝试通过 Docker 服务器 ip + 端口通过 nodejs 访问 mysql 时。我收到错误:连接 ETIMEDOUT。
当我在本地计算机上运行相同的 nodejs docker setup 时,它工作正常。有什么我想念的吗?
这里是 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
【问题讨论】:
-
您是否尝试在本地计算机上通过
localhost:3306访问mysql 容器?请提供更多信息 - docker files/docker-compose/outputs。到目前为止,我的建议是使用 docker-compose 并使用 docker-compose dns(即mysql:3306)从桥接网络中连接到 mysql 容器,前提是您的设置可以允许 db 仅对您的 node.js 服务器可用。 -
我也想通过 Sequal Pro 等 Mac 客户端访问数据库。我添加了那些设置文件。感谢您的帮助。
-
你试过通过域名连接吗?首先需要检查是否有任何监听以及是否有防火墙:
sudo netstat -tulpen、sudo ufw status verbose。如果不是这篇文章可能会有所帮助:digitalocean.com/community/tutorials/… -
看起来和docker网络设置有关。一些容器 ip 是 128.0.0.1 而不是主机 ip。是否可以使用主机ip?
-
我还在 docker 中将它们添加到同一个网络中。即使是 Curl 操作也不起作用。
标签: mysql node.js docker connection