Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker build:mkdir创建文件夹,但它们在运行时消失_Docker_Docker Compose_Docker Build - Fatal编程技术网

Docker build:mkdir创建文件夹,但它们在运行时消失

Docker build:mkdir创建文件夹,但它们在运行时消失,docker,docker-compose,docker-build,Docker,Docker Compose,Docker Build,我正在尝试使用以下Dockerfile扩展Apache 2 Docker容器: FROM joomla:3-apache-php7 RUN apt-get update RUN a2enmod ssl RUN printf "\nIncludeOptional /data/apache/conf-enabled/*.conf\n" >> /etc/apache2/apache2.conf RUN printf "include_path = '.:/data/php/con

我正在尝试使用以下Dockerfile扩展Apache 2 Docker容器:

FROM joomla:3-apache-php7    
RUN apt-get update
RUN a2enmod ssl

RUN printf "\nIncludeOptional /data/apache/conf-enabled/*.conf\n" >> /etc/apache2/apache2.conf
RUN printf "include_path = '.:/data/php/conf.d'" > /usr/local/etc/php/conf.d/additional.ini

RUN bash -c 'mkdir -pv /data/{apache/conf-enabled,php/conf.d}'
RUN ln -s /etc/apache2/sites-enabled/ /data/apache/sites-enabled

VOLUME ["/var/www/html/", "/data/apache/", "/data/php/"]

EXPOSE 80 443

ENTRYPOINT ["/entrypoint.sh"]
CMD ["apache2-foreground"]
当我尝试启动容器时,会出现以下情况:

root@n06 / # docker-compose up -d
root@n06 / # docker-compose logs container
apache2: Syntax error on line 223 of /etc/apache2/apache2.conf: Could not open config directory /data/apache/conf-enabled: No such file or directory
当我注释掉
RUN printf“\n包括可选的/data/apache/conf enabled/*.conf\n”>/etc/apache2/apache2.conf
并登录到正在运行的容器中时:

root@1c72507b2024:/# ls -la /data/**
/data/apache:
total 8
drwxr-xr-x 2 root root 4096 Sep  3 11:39 .
drwxr-xr-x 5 root root 4096 Sep  3 11:50 ..

/data/php:
total 8
drwxr-xr-x 2 root root 4096 Sep  3 11:39 .
drwxr-xr-x 5 root root 4096 Sep  3 11:50 ..
创建的dir会随机消失,有时会出现启用了/data/apache/conf的目录

编辑
确实没有足够的数据可以肯定地回答这一问题,但最大的提示来自您将这些定义为卷的事实:

VOLUME ["/var/www/html/", "/data/apache/", "/data/php/"]
我怀疑您的compose命令正在从以前的运行中提取这些文件夹。如果您在外部swarm上运行,这些卷可能会有所不同,具体取决于swarm在哪个节点上运行您的容器。要确定这一点,我们需要查看您的
docker compose.yml
,了解运行这些命令的环境,以及您正在运行的所有
docker compose
命令(
stop
down
非常不同)

请注意,我不建议将卷创建为Dockerfile的一部分,因为它限制了在此基础上构建的任何映像能够修改这些文件夹(它们所做的任何更改通常都会丢失),并且当您不在compose中定义卷位置时,它会创建匿名容器卷。这些匿名容器卷需要在删除时使用额外的标志(
docker-rm-v
)或在每个唯一id上使用
docker-volume-rm
手动清理



回答编辑后的问题:使用compose卷装载时,它取决于/mnt/docker/test/apache中的内容,容器中的目录内容将被从主机装载的内容完全覆盖。如果您的容器在不同的主机(例如swarm)上运行,则每个主机在此位置可能有不同的内容。如果目录丢失,将导致容器中出现空目录。

BTW:目录创建成功:
Step6:运行bash-c'mkdir-pv/data/{apache/conf enabled,php/conf.d}'-->运行在77a80dc8b5d3 mkdir:created directory'/data'mkdir:created directory'/data/apache'mkdir:created directory'/data/apache/conf启用了'mkdir:created directory'/data/php/conf.d'
@unrl我已经根据您的撰写文件更新了我的答案。谢谢,我必须将
/data/apache/*
/data/php/*
中的每个文件夹指定为卷才能访问它们。这很有效,但我不知道为什么。
VOLUME ["/var/www/html/", "/data/apache/", "/data/php/"]