【问题标题】:How to run two node.js apps and mysql in Docker如何在 Docker 中运行两个 node.js 应用程序和 mysql
【发布时间】:2020-02-24 19:43:24
【问题描述】:

我有两个 node.js 应用程序使用相同的数据库并在本地运行它们工作正常,但我想在 docker 容器中将它们作为服务运行。如果我在 docker 中运行任何一个应用程序和数据库,它工作正常,但是当我尝试运行这两个节点应用程序时,我遇到了问题。

我的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 服务。

我做错了什么以及如何解决它以便我可以访问这两个服务

提前致谢

【问题讨论】:

    标签: node.js docker docker-compose dockerfile


    【解决方案1】:

    在用户容器中你已经暴露了端口:

        ports:
          - "3000:3000"
          - "3001:3001"
    

    如果您还想公开它们的端口,请向其他容器添加类似的部分:

      db:
        ...snip...
        ports:
          - "3306:3306"
    

    【讨论】:

      【解决方案2】:

      您没有为您的管理服务公开端口,而只是您的用户服务。

      您的撰写当前的方式是,您将 2 个端口暴露给您的用户服务,但您的服务器只会监听其中一个端口。

      【讨论】:

        猜你喜欢
        • 2019-02-03
        • 1970-01-01
        • 1970-01-01
        • 2020-08-10
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        • 2023-03-23
        • 2014-10-21
        相关资源
        最近更新 更多