Node.js 与 MySQL docker 容器网络设置
Posted
技术标签:
【中文标题】Node.js 与 MySQL docker 容器网络设置【英文标题】:Node.js with MySQL docker container network setup 【发布时间】:2018-10-30 11:09:55 【问题描述】:我有一个 Node.js 应用程序(使用新的 NestJS)框架,在端口 3000 上运行。作为数据库,我通过 TypeORM 使用 mysql。在本地,一切正常。我在 dockerizing 时遇到了问题。
我的 TypeORM 配置:
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "root",
"database": "nest",
"entities": ["src/**/*.entity.ts,.js"],
"synchronize": true
我的docker-compose.yml
如下:
version: "3"
services:
db:
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: nest
MYSQL_USER: root
MYSQL_PASSWORD: root
networks:
- new
nest:
image: grimscythe/nest-sample
depends_on:
- db
ports:
- 3000:3000
networks:
- new
networks:
new:
我一直在阅读有关此特定场景的文档,并且一切都应该可以正常工作。
重击 MySQL 容器表明数据库运行良好。然而,Node 框架吐出Unable to connect to the database...
。我在docker-compose.yml
文件中遗漏了什么吗?
【问题讨论】:
【参考方案1】:尝试"host": "db"
而不是本地主机。 Docker-compose 使用服务名称作为其 DNS 条目
【讨论】:
所以看来我不得不将主机更改为db
,正如你所说,而且我已经将数据库更改为mariadb,现在一切都很好;)【参考方案2】:
我刚刚经历过同样的事情,写下来给后面的人。
你的 typeorm 配置主机被指定为 localhost,这很好,对于没有 docker 容器的本地开发是必需的,但是如果你想将 typeorm 连接到 docker 容器,请使用 db ie。 docker-compose 文件中的服务名称。
一个建议是在安装dotenv
包之后使用"host": process.env.HOST ?? 'localhost'
,这样您就可以使用来自env 文件的HOST,否则使用localhost。或者创建一个连接数组,命名为 test / production / staging 并加载适当命名的 typeorm 配置,具体取决于当时的 NODE_ENV。
请参阅 Ben Awad Youtube 视频,了解一个很好的例子。
【讨论】:
以上是关于Node.js 与 MySQL docker 容器网络设置的主要内容,如果未能解决你的问题,请参考以下文章
docker+mysql(8.0.15)+node.js(hapi.js)构建容器(命令行)
Docker + fig / compose + nginx + node.js + mysql + redis
如何在基于 Node.js 镜像的 Docker 容器中使用 Let's Encrypt
将 NodeJS Docker 容器连接到 MySQL Docker 容器 - docker-compose 3