【问题标题】:Create files / folders on docker-compose build or docker-compose up在 docker-compose build 或 docker-compose up 上创建文件/文件夹
【发布时间】:2017-02-22 19:13:02
【问题描述】:

我正在尝试进入 Docker 的第一步,所以我尝试制作一个 Dockerfile,它可以创建一个简单的 index.html 和一个目录图像(参见下面的代码)

然后我运行 docker-compose build 来创建镜像,然后运行 ​​docker-compose-up 来运行服务器。但我没有得到文件 index.html 或文件夹图像。

这是我的 Dockerfile:

FROM php:apache
MAINTAINER brent@dropsolid.com

WORKDIR /var/www/html

RUN touch index.html \
    && mkdir images

这是我的 docker-compose.yml

version: '2'
services:
  web:
    build: .docker/web
    ports:
      - "80:80"
    volumes:
      - ./docroot:/var/www/html

我希望这会创建一个带有图像目录和 index.html 的 docroot 文件夹,但我只得到了 docroot。

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    图像确实包含这些文件

    Dockerfile 包含有关如何构建映像的说明。您从该 Dockerfile 构建的映像确实包含 index.htmlimages/

    但是,您在容器中过度使用它们

    在运行时,您从构建的映像创建了一个容器。在该容器中,您将外部目录 ./docroot 挂载为 /var/www/html

    挂载会隐藏该路径之前的所有内容,因此此挂载将隐藏/var/www/html 的先前内容,并将它们替换为./docroot 中的任何内容。

    把东西放进你的坐骑

    在您询问的 cmets 中

    有没有可能先挂载然后再创建文件之类的?还是那不可能?

    你做事的方式,你挂载了你的原始文件,所以一旦容器被创建,它们就不能再访问了。

    有几种方法可以解决这个问题。

    改变他们在图片中的路径

    如果您将这些文件放在映像中的不同路径中,则它们不会被挂载覆盖。

    WORKDIR /var/www/alternate-html
    
    RUN touch index.html \
        && mkdir images
    
    WORKDIR /var/www/html
    

    现在,在运行时,您仍将在 /var/www/html 上安装此挂载,其中将包含来自外部目录的内容。这可能是也可能不是空目录。您可以在启动时告诉容器运行脚本并将内容复制到那里,如果这是您想要的。

    COPY entrypoint.sh /entrypoint.sh
    RUN chmod 0755 /entrypoint.sh
    ENTRYPOINT ["/entrypoint.sh"]
    

    (这是假设您没有定义的入口点 - 如果有,您可能只需要调整现有脚本。)

    入口点.sh:

    #!/bin/sh
    
    cp -r /var/www/alternate-html/* /var/www/html
    exec "$@"
    

    这将运行cp 命令,然后将控制权交给该图像的CMD

    在外部处理

    您还可以选择简单地将您想要的文件预先填充到外部./docroot 中。然后它们将在容器启动并添加目录挂载时出现。

    【讨论】:

    • 好的,谢谢,这个答案很清楚 :D 但是有没有可能先挂载然后创建文件之类的?还是那不可能?
    • @Brentg 我更新了我的答案,对这个问题发表了一些评论。
    • 哇,这些评论真的很好,非常感谢:D
    • 我仍在寻找如何让 docker-compose 在主机上为绑定卷创建文件夹的答案。
    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2018-12-18
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多