【问题标题】:Dockerfile - Touch file at container pathDockerfile - 在容器路径中触摸文件
【发布时间】:2018-05-29 11:59:41
【问题描述】:

docker-compose.yml 文件:

web:
  build: ./code
  ports:
    - "80:80"
  volumes:
    - ./mount:/var/www/html

dockerfile./code:

FROM wordpress
WORKDIR /var/www/html
RUN touch test.txt

这是我用来建立一个简单的 WordPress 博客的生产环境(为简单起见,省略了 docker-compose.yml 和 Dockerfile 中的其他服务)。

这就是我正在做的事情:

  • 在容器目的地/var/www/html绑定挂载主机目录
  • 在构建期间创建 test.txt 文件

什么是工作:

  • 当我在容器上检查 /www/var/html 时,我没有找到我的 test.txt 文件

做什么了解:

  • 绑定安装发生在运行时
  • 在这种特殊情况下,文件被创建,但是当您挂载主机目录时,Dockerfile 中的命令会被覆盖
  • 当您使用卷挂载时,它可以工作

不明白了解的内容:

  • 您可以通过哪些方式将最新代码放入使用绑定挂载来持久化数据的容器中?
  • 如何创建一个可以让我在运行时实现这一目标的脚本?
  • 考虑到我必须使用绑定挂载(AWS ECS 仅在您为卷使用主机目录路径时才会保留数据),我还能如何实现这一点

【问题讨论】:

    标签: wordpress docker docker-compose wordpress-theming dockerfile


    【解决方案1】:

    您的数据将在运行时持久化。运行时存储在/var/www/html 中的所有内容都将持久保存在主机./mount 目录中。

    在构建时,一切都发生在容器映像内的 docker 层。

    如果您想先做一些事情,您可以创建一个脚本,ADDit 到您的图像,并使用CMDENTRYPOINT 在容器启动时运行脚本。

    总结

    • 您可以通过哪些方式将最新代码放入使用绑定挂载来持久化数据的容器中?

    您将最新代码添加到图像中(即 git clone、COPY、ADD 或适合您的代码)。容器不应该是可变的,因此您保持代码版本化并定义持久文件夹(例如用于上传)

    • 如何创建一个可以让我在运行时实现这一目标的脚本?

    如果您想在运行时执行此操作,请将您的 shell 脚本添加到映像中,然后运行它。虽然,这不是此用例的最佳方法。

    • 考虑到我必须使用绑定挂载(AWS ECS 仅在您为卷使用主机目录路径时才会保留数据),我还能如何实现这一点

    恕我直言,您应该使用图像作为代码的构建。您的图像不应是可变的,并且必须反映代码生命周期中的实例。使用数据定义路径,这些路径将是您在主机级别的挂载。

    【讨论】:

    • 那么为什么'test.txt'在这种特殊情况下不存在?
    • 您可以查看this similar question 及其答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2019-11-13
    • 2019-08-16
    相关资源
    最近更新 更多