【Docker】Dockerfiler如何使用多个CMD命令
在Dockerfile中使用CMD运行npm start(3000端口)和node ./server/server.js (8080端口)
Dockerfile:
FROM node:8.9-alpineENV 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-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.shnohup npm start &
nohup node ./server/server.js &
希望能帮助到你。
以上是 【Docker】Dockerfiler如何使用多个CMD命令 的全部内容, 来源链接: utcz.com/a/73359.html