我在学道克。我多次看到Dockerfile有WORKDIR命令:
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” ] 难道我就不能省略WORKDIR和Copy,把我的Dockerfile放在我的项目的根上吗?使用这种方法的缺点是什么?
发布于 2018-06-27 15:19:33
根据文档
WORKDIR指令为任何运行、CMD、ENTRYPOINT、复制和添加在Dockerfile中的指令设置工作目录。如果WORKDIR不存在,即使它没有在后续的Dockerfile指令中使用,它也会被创建。
此外,在码头工人最佳做法中,它建议您使用它:
..。您应该使用WORKDIR,而不是像运行cd…这样的扩散指令。&&做一些很难阅读、故障排除和维护的事情。
我建议留着它。
我认为您可以将您的Dockerfile重构为如下内容:
FROM node:latest
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . ./
EXPOSE 3000
CMD [ "npm", "start" ] 发布于 2018-10-24 08:30:35
你不必
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” ] 发布于 2018-06-27 15:13:33
您可以将WORKDIR看作容器内的cd (它会影响稍后在Dockerfile中出现的命令,比如RUN命令)。如果在上面的示例中删除了WORKDIR,RUN npm install将无法工作,因为您将不在容器内的/usr/src/app目录中。
我不认为这与您放置Dockerfile的位置有什么关系(因为您的Dockerfile在主机上的位置与容器中的pwd无关)。您可以将Dockerfile放在任何您想要的项目中。但是,COPY的第一个参数是相对路径,因此如果移动Dockerfile,可能需要更新这些COPY命令。
https://stackoverflow.com/questions/51066146
复制相似问题