我有两个使用相同数据库的 Node.js 应用程序,并且在本地运行它们工作正常,但我想将它们作为 Docker 容器中的服务运行。如果我在 docker 中运行任一应用程序和数据库,它工作正常,但是当我尝试运行这两个 Node 应用程序时,我会遇到问题。
我的docker-compose.yml
文件包含以下内容
version: '3'
services:
db:
build: ./db
environment:
MYSQL_DATABASE: mydb
MYSQL_ROOT_PASSWORD: password
MYSQL_USER: mysql
MYSQL_PASSWORD: password
DATABASE_HOST: db
admin:
build: ./admin
environment:
DATABASE_HOST: db
MYSQL_PORT: 3306
MYSQL_DATABASE: mydb
MYSQL_USER: mysql
MYSQL_PASSWORD: password
user:
build: ./user
environment:
DATABASE_HOST: db
MYSQL_PORT: 3306
MYSQL_DATABASE: mydb
MYSQL_USER: mysql
MYSQL_PASSWORD: password
ports:
- "3000:3000"
- "3001:3001"
depends_on:
- db
restart: on-failure
admin
服务的 dockerfile
包含此
FROM node:8
WORKDIR /usr/src/admin
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
user
服务的 dockerfile
包含此
FROM node:8
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
我的问题是,我似乎只能访问 docker-compose.yml
文件中的最后一个服务,在本例中是 user
服务,但不能访问管理服务。
我有时会说express正在监听两个端口,但我只能访问服务user
我尝试交换服务,然后只能访问 admin
服务。
我做错了什么以及如何修复它以便我可以访问这两种服务
提前致谢
最佳答案
在用户容器中,您已公开端口:
ports:
- "3000:3000"
- "3001:3001"
如果您还想公开其他容器的端口,请向其他容器添加类似的部分:
db:
...snip...
ports:
- "3306:3306"
关于node.js - 如何在 Docker 中运行两个 Node.js 应用程序和 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60382867/