Dockerfile 上的 WORKDIR 有什么意义?

新手上路,请多包涵

我正在学习 Docker。我多次看到 DockerfileWORKDIR 命令:

 FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
EXPOSE 3000
CMD [ “npm”, “start” ]

我不能只省略 WORKDIRCopy 而只是将我的 Dockerfile 作为项目的根目录吗?使用这种方法有什么缺点?

原文由 Le garcon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 771
2 个回答

根据 文档

WORKDIR 指令为 Dockerfile 中任何 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令设置工作目录。如果 WORKDIR 不存在,即使它没有在任何后续 Dockerfile 指令中使用,它也会被创建。

此外,在 Docker 最佳实践 中,它建议您使用它:

…您应该使用 WORKDIR 而不是像 RUN cd … && do-something 之类的大量指令,这些指令难以阅读、排除故障和维护。

我建议保留它。

我认为您可以将 Dockerfile 重构为:

 FROM node:latest
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . ./
EXPOSE 3000
CMD [ "npm", "start" ]

原文由 juanlumn 发布,翻译遵循 CC BY-SA 4.0 许可协议

你不必

RUN mkdir -p /usr/src/app

这将在您指定 WORKDIR 时自动创建

FROM node:latest
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . ./
EXPOSE 3000
CMD [ “npm”, “start” ]

原文由 0xsegfault 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题