【问题标题】:What is the CMD command for nats-server inside DockerfileDockerfile 中 nats-server 的 CMD 命令是什么
【发布时间】:2021-03-15 18:45:21
【问题描述】:

我目前正在按照微服务架构使用 NestJS 构建应用程序。并使用 NATS 作为消息传递系统。它在我的本地机器上运行良好,但我无法对 NATS 服务器进行 docker 化。

我的项目的文件夹结构:

├─── services/
    ├─── nats/
    |       Dockerfile
    ├─── client/
    |       ...
    |       ...
    |       .dockerignore
    |       Dockerfile
    └─── docker-compose.yml

现在,nats/ 文件夹内的Dockerfile 描述如下:

FROM nats:2.1.9

EXPOSE 4222

CMD [ "nats-server" ]

client/ 文件夹内的Dockerfile 描述为:

FROM node:12

WORKDIR /myProject/src/app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

EXPOSE 8081

CMD [ "node", "dist/main" ]

docker-compose.yml 是:

version: '3'

services:
  nats-server:
    image: nats:2.1.9
    restart: always
    build: ./nats
    ports:
      - 4222:4222

  client-service:
    build: ./client
    volumes:
      - ./client:/myProject/src/app
    depends_on:
      - nats-server
    environment:
      NODE_ENV: development
    ports:
      - 8081:3000

我运行命令sudo docker-compose build没有发现错误,之后运行命令sudo docker-compose up发现如下错误:

Recreating services_nats-server_1 ... done
Recreating services_client-service_1 ... done
Attaching to services_nats-server_1, services_client-service_1
nats-server_1     | nats-server: unrecognized command: "nats-server_1"
services_nats-server_1 exited with code 1
nats-server_1     | nats-server: unrecognized command: "nats-server_1"
nats-server_1     | nats-server: unrecognized command: "nats-server_1"
nats-server_1     | nats-server: unrecognized command: "nats-server_1"
client-service_1  | [Nest] 1   - 12/03/2020, 4:44:34 PM   [NestFactory] Starting Nest application...
client-service_1  | [Nest] 1   - 12/03/2020, 4:44:34 PM   [InstanceLoader] AppModule dependencies initialized +41ms
client-service_1  | [Nest] 1   - 12/03/2020, 4:44:34 PM   [InstanceLoader] MongooseModule dependencies initialized +1ms
client-service_1  | [Nest] 1   - 12/03/2020, 4:44:34 PM   [InstanceLoader] ClientsModule dependencies initialized +1ms
client-service_1  | [Nest] 1   - 12/03/2020, 4:44:34 PM   [InstanceLoader] ClientsModule dependencies initialized +0ms
client-service_1  | [Nest] 1   - 12/03/2020, 4:44:34 PM   [InstanceLoader] ConfigHostModule dependencies initialized +1ms
client-service_1  | [Nest] 1   - 12/03/2020, 4:44:34 PM   [InstanceLoader] ConfigModule dependencies initialized +1ms
services_nats-server_1 exited with code 1
nats-server_1     | nats-server: unrecognized command: "nats-server_1"
nats-server_1     | nats-server: unrecognized command: "nats-server_1"
nats-server_1     | nats-server: unrecognized command: "nats-server_1"
nats-server_1     | nats-server: unrecognized command: "nats-server_1"
nats-server_1     | nats-server: unrecognized command: "nats-server_1"

客户端服务 Dockerfile 没有问题,因为它依赖于 nats-server 尝试首先运行它。谁能帮我解决问题?

感谢您的时间和考虑。

【问题讨论】:

    标签: node.js docker microservices nestjs nats.io


    【解决方案1】:

    检查Dockerfile,您会注意到ENTRYPOINT 设置为/nats-server,而CMDENTRYPOINT 的参数(在这种情况下为--config nats-server.conf)。 除非您扩展 nats 映像,否则您不需要基于它构建一个新映像(从撰写文件中删除 build: ./nats)。覆盖默认的CMD 可以通过在docker-compose.yml 上设置command: 来实现。

    【讨论】:

    • build:image: 的组合也会用您修改的镜像覆盖 Docker Hub 镜像;手动 docker pull nats:2.1.9 将导致 Docker 重新获取官方镜像。)
    • @DavidMaze 你是对的。 build: 无法使用。
    【解决方案2】:

    nats-server 服务的build: 命令已覆盖 Docker Hub 映像。我只需要拉取图像并暴露端口即可。

    所以,我的docker-compose.yml 文件如下:

    version: '3'
    
    services:
      nats-server:
        image: nats:2.1.9
        restart: always
        ports:
          - 4222:4222
    
      client-service:
        build: ./client
        volumes:
          - ./client:/myProject/src/app
        depends_on:
          - nats-server
        environment:
          NODE_ENV: development
        ports:
          - 8081:3000
    

    【讨论】:

      猜你喜欢
      • 2021-04-07
      • 2018-09-12
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多