docker - 为什么在WORKDIR之后创建的目录消失

标签 docker

目前,我有以下docker文件

FROM ubuntu:14.04
ADD . /var/www/html/xxx
RUN mkdir -p /tmp/debug1
WORKDIR /var/www/html/xxx
RUN mkdir -p /var/www/html/xxx/debug2
docker-compose up -d之后

我通过使用以下命令进入了容器
docker exec -it xxx_xxx_1 bash

令我惊讶
  • /tmp/debug1已创建
  • /var/www/html/xxx/debug2,不是创建的

  • 但是,如果我使用
    docker run -it xxx bash
    

    我意识到的是
  • /tmp/debug1已创建
  • /var/www/html/xxx/debug2已创建

  • 我可以知道为什么在WORKDIR行之后有这种行为吗?

    最佳答案

    这听起来像是在播放音量。您可以使用撰写文件更新问题吗?

    我假设您已经在compose文件中定义了一个将内容装载到/var/www/html的卷

    如果这是真的,那么这将解释您所看到的。当您运行不带compose的容器时,您会看到/var/www/html/xxx/debug2,因为/var/www/html包含最初在docker构建时创建的内容。如果使用compose运行它,则docker会将主机目录或docker卷挂载到/var/www/html上,在这种情况下,原始存在的所有内容都会变为“不可见”。如果您的卷/主机目录为空,则/var/www/html也为空。

    关于docker - 为什么在WORKDIR之后创建的目录消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42408312/

    相关文章:

    docker - 如何在 Docker 镜像中写入文件?

    docker - Docker工具箱卷安装在Windows 10上不起作用

    docker - puppeteer.launch() 与 puppeteer.connect() 的性能差异是什么?

    docker - 更改Docker容器变量

    apache - 使用docker bridge网络IP访问apache容器中的vhost

    amazon-web-services - docker 中的同一应用程序构成了映射AWS EC2实例上不同端口的配置

    java - 在 Docker 容器中构建 Java Gradle 项目?

    docker - 共享Docker容器

    linux - 在Dockerfile中运行Linux命令引发错误

    docker - 使 `pipenv run` 运行多个命令