鍍金池/ 問答/Java  Linux  網(wǎng)絡(luò)安全/ Dockerfiler如何使用多個(gè)CMD命令

Dockerfiler如何使用多個(gè)CMD命令

在Dockerfile中使用CMD運(yùn)行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端口

項(xiàng)目目錄:
圖片描述

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"
回答
編輯回答
使勁操

兩個(gè)辦法,一個(gè)是CMD不用中括號框起來,將命令用"&&"符號鏈接:

# 用nohup框起來,不然npm start執(zhí)行了之后不會執(zhí)行后面的
CMD nohup sh -c 'npm start && node ./server/server.js'

另一個(gè)方法是不用CMD,用ENTRYPOINT命令,指定一個(gè)執(zhí)行的shell腳本,然后在entrypoint.sh文件中寫上要執(zhí)行的命令:

ENTRYPOINT ["./entrypoint.sh"]

entrypoint.sh文件如下:

// entrypoint.sh
nohup npm start &
nohup node ./server/server.js &

希望能幫助到你。

2017年4月7日 19:19