Dockerfile 中 nats-server 的 CMD 命令是什么
What is the CMD command for nats-server inside Dockerfile
我目前正在按照微服务架构使用 NestJS 构建应用程序。并使用 NATS 作为消息系统。它在我的本地机器上运行良好,但我无法 docker 化 NATS 服务器。
我项目的文件夹结构:
├─── services/
├─── nats/
| Dockerfile
├─── client/
| ...
| ...
| .dockerignore
| Dockerfile
└─── docker-compose.yml
现在nats/
文件夹中的Dockerfile
描述如下:
FROM nats:2.1.9
EXPOSE 4222
CMD [ "nats-server" ]
和 Dockerfile
在 client/
文件夹中描述为:
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。谁能帮我解决问题?
非常感谢您的时间和考虑。
检查 Dockerfile,您会注意到 ENTRYPOINT
设置为 /nats-server
并且 CMD
是 ENTRYPOINT
的参数(--config nats-server.conf
在这种情况下)。
除非您扩展 nats 图像,否则您不需要基于它构建新图像(从撰写文件中删除 build: ./nats
)。覆盖默认 CMD
可以通过在 docker-compose.yml
.
上设置 command:
来实现
nats-server
服务的 build:
命令覆盖了 Docker 集线器映像。我只需要拉取镜像,暴露端口即可。
所以,我的 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
我目前正在按照微服务架构使用 NestJS 构建应用程序。并使用 NATS 作为消息系统。它在我的本地机器上运行良好,但我无法 docker 化 NATS 服务器。
我项目的文件夹结构:
├─── services/
├─── nats/
| Dockerfile
├─── client/
| ...
| ...
| .dockerignore
| Dockerfile
└─── docker-compose.yml
现在nats/
文件夹中的Dockerfile
描述如下:
FROM nats:2.1.9
EXPOSE 4222
CMD [ "nats-server" ]
和 Dockerfile
在 client/
文件夹中描述为:
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。谁能帮我解决问题?
非常感谢您的时间和考虑。
检查 Dockerfile,您会注意到 ENTRYPOINT
设置为 /nats-server
并且 CMD
是 ENTRYPOINT
的参数(--config nats-server.conf
在这种情况下)。
除非您扩展 nats 图像,否则您不需要基于它构建新图像(从撰写文件中删除 build: ./nats
)。覆盖默认 CMD
可以通过在 docker-compose.yml
.
command:
来实现
nats-server
服务的 build:
命令覆盖了 Docker 集线器映像。我只需要拉取镜像,暴露端口即可。
所以,我的 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