【Docker】Dockerfiler如何使用多个CMD命令

在Dockerfile中使用CMD运行npm start(3000端口)和node ./server/server.js (8080端口)

Dockerfile:

FROM node:8.9-alpine

ENV NODE_ENV production

WORKDIR /usr/src/app

COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]

RUN npm install --production --silent && mv node_modules ../

COPY . .

CMD [ "npm", "start", "node", "./server/server.js" ]

本地只能打开3000端口

项目目录:
【Docker】Dockerfiler如何使用多个CMD命令

docker-compose.yml:

version: '2.1'

services:

chat:

image: chat

container_name: chat

build: .

environment:

NODE_ENV: production

ports:

- "3000:3000"

- "8080:8080"

volumes:

- ./:/usr/src/app

links:

- mongo

mongo:

container_name: mongo

image: mongo

ports:

- "27017:27017"

回答

两个办法,一个是CMD不用中括号框起来,将命令用"&&"符号链接:

# 用nohup框起来,不然npm start执行了之后不会执行后面的

CMD nohup sh -c 'npm start && node ./server/server.js'

另一个方法是不用CMD,用ENTRYPOINT命令,指定一个执行的shell脚本,然后在entrypoint.sh文件中写上要执行的命令:

ENTRYPOINT ["./entrypoint.sh"]

entrypoint.sh文件如下:

// entrypoint.sh

nohup npm start &

nohup node ./server/server.js &

希望能帮助到你。

如何在一个Docker中运行多个程序进程

以上是 【Docker】Dockerfiler如何使用多个CMD命令 的全部内容, 来源链接: utcz.com/a/73359.html

回到顶部