Dockerfiler如何使用多个CMD命令

发布于 2022-09-06 23:52:02 字数 936 浏览 20 评论 0

在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-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"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

作业与我同在 2022-09-13 23:52:02

两个办法,一个是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 &

希望能帮助到你。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文