image - WORKDIR 是否创建目录?
问题描述
这些是 Dockerfile 的前 2 行:
FROM node:12
WORKDIR /code
以下是一些我不明白的事情: 从 docker 的文档中,我知道第二行将工作目录设置为 /code。这个过程发生在哪里?当 docker 在创建映像时运行 Dockerfile 的第二行时会发生这种情况吗?如果 /code 不存在,它是由 docker 创建的吗?/code 将在哪里创建?在图像的根目录中?
解决方案
... 设置工作目录.... 如果
WORKDIR
不存在,即使它没有在任何后续Dockerfile
指令中使用,它也会被创建。
RUN mkdir
我偶尔会在切换到某个目录之前看到 SO 问题WORKDIR
。由于WORKDIR
将创建目录,因此这不是必需的。
Dockerfile 中的所有路径始终位于映像内,但源路径COPY
和ADD
指令除外,它们位于主机上的构建上下文目录中。像这样的绝对路径/code
将直接位于图像的根目录中,遵循正常的 Unix 约定。
即使 Dockerfile 尚未完成,您也可以从镜像中运行临时容器来检查这一点。
host$ docker build -t my-image .
host$ docker run --rm my-image ls -l /
host$ docker run --rm -it my-image /bin/sh
0123456789ab# ls -l /
0123456789ab# exit
(这将始终有效,假设映像包含像sh
和之类的核心工具ls
, docker exec
需要首先运行容器;在您优化 Dockerfile 时,这可能还不可能。)
推荐阅读
- java - 带有 JAVA 服务加载器的单例设计模式
- firebase - 使用firebase注册新用户并做出本机反应后,如何返回登录页面?
- vba - 如何在 VBA 中使用多个错误处理程序
- java - 插入 Json 值时出现 Spring JPA 异常(使用 hibernate-types-52)
- javascript - VueRouter this.$route 未定义
- sql - hadoop中空格后的子字符串
- ios - iOS 应用程序的新要求 - 让用户/客户可以访问它们
- c# - 来自 kinect (v1) c# 的红外流
- razor - 剃刀视图中无法识别“模型”一词
- python - 如何将大数据流式传输到 Google Cloud Storage?