首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Dockerfile上使用WORKDIR有什么意义?

在Dockerfile上使用WORKDIR有什么意义?
EN

Stack Overflow用户
提问于 2018-06-27 15:07:30
回答 7查看 244.9K关注 0票数 264

我在学道克。我多次看到DockerfileWORKDIR命令:

代码语言:javascript
复制
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放在我的项目的根上吗?使用这种方法的缺点是什么?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2018-06-27 15:19:33

根据文档

WORKDIR指令为任何运行、CMD、ENTRYPOINT、复制和添加在Dockerfile中的指令设置工作目录。如果WORKDIR不存在,即使它没有在后续的Dockerfile指令中使用,它也会被创建。

此外,在码头工人最佳做法中,它建议您使用它:

..。您应该使用WORKDIR,而不是像运行cd…这样的扩散指令。&&做一些很难阅读、故障排除和维护的事情。

我建议留着它。

我认为您可以将您的Dockerfile重构为如下内容:

代码语言:javascript
复制
FROM node:latest
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . ./
EXPOSE 3000
CMD [ "npm", "start" ] 
票数 267
EN

Stack Overflow用户

发布于 2018-10-24 08:30:35

你不必

RUN mkdir -p /usr/src/app

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

代码语言:javascript
复制
FROM node:latest
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . ./
EXPOSE 3000
CMD [ “npm”, “start” ] 
票数 106
EN

Stack Overflow用户

发布于 2018-06-27 15:13:33

您可以将WORKDIR看作容器内的cd (它会影响稍后在Dockerfile中出现的命令,比如RUN命令)。如果在上面的示例中删除了WORKDIRRUN npm install将无法工作,因为您将不在容器内的/usr/src/app目录中。

我不认为这与您放置Dockerfile的位置有什么关系(因为您的Dockerfile在主机上的位置与容器中的pwd无关)。您可以将Dockerfile放在任何您想要的项目中。但是,COPY的第一个参数是相对路径,因此如果移动Dockerfile,可能需要更新这些COPY命令。

票数 73
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51066146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档