Node.js MySQL docker 容器网络设置
Node.js with MySQL docker container network setup
我有一个 Node.js 应用程序(使用新的 NestJS)框架,运行 在端口 3000 上。作为数据库,我通过 TypeORM 使用 MySQL。在本地一切正常。不过,我在对它进行 docker 化时遇到了问题。
我的 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:
我一直在阅读关于这个特定场景的文档,所有这些都应该可以正常工作。
Bash 进入 MySQL 容器显示数据库 运行 很好。然而,Node 框架吐出 Unable to connect to the database...
。我在 docker-compose.yml
文件中遗漏了什么吗?
尝试 "host": "db"
而不是 localhost。 Docker-compose 使用服务名称作为其 DNS 条目
我刚刚经历了同样的事情,写下来供后续的人使用。
你的 typeorm 配置主机被指定为 localhost,这很好并且对于没有 docker 容器的本地开发是必需的,但是如果你想将 typeorm 连接到 docker 容器使用 db IE。 docker-compose 文件中的服务名称。
一个建议是在安装 dotenv
软件包后使用 "host": process.env.HOST ?? 'localhost'
,这样您就可以使用 env 文件中的 HOST,否则使用 localhost。或者创建一个连接数组,命名为测试/生产/暂存并加载适当命名的 typeorm 配置,具体取决于当时的 NODE_ENV。
查看 Ben Awad Youtube 视频中的一个很好的例子。
我有一个 Node.js 应用程序(使用新的 NestJS)框架,运行 在端口 3000 上。作为数据库,我通过 TypeORM 使用 MySQL。在本地一切正常。不过,我在对它进行 docker 化时遇到了问题。
我的 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:
我一直在阅读关于这个特定场景的文档,所有这些都应该可以正常工作。
Bash 进入 MySQL 容器显示数据库 运行 很好。然而,Node 框架吐出 Unable to connect to the database...
。我在 docker-compose.yml
文件中遗漏了什么吗?
尝试 "host": "db"
而不是 localhost。 Docker-compose 使用服务名称作为其 DNS 条目
我刚刚经历了同样的事情,写下来供后续的人使用。
你的 typeorm 配置主机被指定为 localhost,这很好并且对于没有 docker 容器的本地开发是必需的,但是如果你想将 typeorm 连接到 docker 容器使用 db IE。 docker-compose 文件中的服务名称。
一个建议是在安装 dotenv
软件包后使用 "host": process.env.HOST ?? 'localhost'
,这样您就可以使用 env 文件中的 HOST,否则使用 localhost。或者创建一个连接数组,命名为测试/生产/暂存并加载适当命名的 typeorm 配置,具体取决于当时的 NODE_ENV。
查看 Ben Awad Youtube 视频中的一个很好的例子。