node.js - 如何在 Docker 中运行两个 Node.js 应用程序和 mysql

标签 node.js docker docker-compose dockerfile

我有两个使用相同数据库的 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/

相关文章:

node.js - 在 Windows 中创建新项目时找不到 ng 命令 angular-cli

sql-server - 从 Docker 内部访问外部 SQL 服务器

docker - 使用 Docker-Compose 和存储选项(大小)

django - Docker compose 用于生产和开发

javascript - 为基于 Node.js 的 CLI 的单个版本运行一次代码

javascript - 为什么 [Object] 在 node.js 中打印到控制台而不是对象的内容?

docker - 谁能解释 docker.sock

git - 无法连接到 github.com 端口 443 : Connection refused, 引导失败,Discourse Docker

docker - 如何使用 docker 在 alpine 图像上以 root 用户身份运行 bash?苏 : must be suid to work properly

javascript - 这个 Node.js 代码似乎替换了同一函数中的函数实现,它有什么作用?