我知道这写得很草率,但我是Docker的新手,只是想掌握它的窍门。我拉了一个镜像FROM wordpress:4.9.2-php7.2-apache
Im,然后试图从我的Dockerfile中覆盖deflate.conf
文件。我使用的命令如下。
ADD /deflate.conf ../../../etc/apache2/mods-available/
字符串
使用这个命令,镜像可以正常构建,但是我一运行它,容器就立即失败了?
当我注解掉ADD行和build/run
镜像时,容器运行正常。所以我尝试从命令行复制命令,如下所示:
docker cp deflate.conf <name>:../../../etc/apache2/mods-available/deflate.conf
型
使用这个命令一切都很好,我得到了想要的结果。
我不知道为什么我的Dockerfile不能工作,但命令行可以。任何帮助都将不胜感激。
3条答案
按热度按时间jrcvhitl1#
为什么不使用COPY或ADD与绝对路径。而不是使用
../../../etc/apache2/mods-available/deflate.conf
,格式应该是:字符串
您也可以使用Docker卷来实现这一点。在
docker build
期间忽略COPY,然后使用run
command,包括-v
选项:型
请注意,当apache服务启动时,
/etc/apache2/mods-available/
上的模块默认不会加载,活动模块应该复制到/etc/apache2/mods-enabled/
。7rtdyuoh2#
我认为与命令行相同的结果,你可以实现:
字符串
在你的Dockerfile里
bogh5gae3#
Dockerfile文档:
复制遵循以下规则:
路径必须在构建的上下文中;*你不能 COPY../something /something,因为Docker构建的第一步是将上下文目录(和子目录)发送到Docker守护进程。
ADD
也是如此:ADD遵循以下规则:
路径必须在构建的上下文内;你不能ADD**../something /something**,因为Docker构建的第一步是将上下文目录(和子目录)发送到Docker守护进程。
因此,如果你想使用dockerfile将某些内容从本地复制到容器中,请确保该文件位于dockerfile的同一目录或目录下。
我不知道你想干什么
docker cp deflate.conf <name>:../../../etc/apache2/mods-available/deflate.conf
,据我所知,你想复制
deflate.conf
到你的容器中的那个路径,但为什么你在/etc
之前使用../../..
,我的意思是你可以直接复制到那个路径,就像这样:docker cp deflate.conf <containerName>:/etc/apache2/mods-available/deflate.conf
个