Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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
Dockerfile覆盖容器中的文件_Docker - Fatal编程技术网

Dockerfile覆盖容器中的文件

Dockerfile覆盖容器中的文件,docker,Docker,我知道这篇文章写得很草率,但我对Docker还是个新手,我只是想掌握它的窍门。我正在从wordpress:4.9.2-php7.2-apache 然后,我试图从Dockerfile中覆盖deflate.conf文件。我使用的命令如下 ADD /deflate.conf ../../../etc/apache2/mods-available/ 使用此命令可以正确构建映像,但一旦我运行它,容器就会立即失败 当我注释掉ADD行和build/run图像时,容器运行良好。因此,我尝试从命令行执行复制命令

我知道这篇文章写得很草率,但我对Docker还是个新手,我只是想掌握它的窍门。我正在从wordpress:4.9.2-php7.2-apache 然后,我试图从Dockerfile中覆盖
deflate.conf
文件。我使用的命令如下

ADD /deflate.conf ../../../etc/apache2/mods-available/
使用此命令可以正确构建映像,但一旦我运行它,容器就会立即失败

当我注释掉ADD行和
build/run
图像时,容器运行良好。因此,我尝试从命令行执行复制命令,如下所示:

docker cp deflate.conf <name>:../../../etc/apache2/mods-available/deflate.conf
docker cp deflate.conf:../../../etc/apache2/mods available/deflate.conf
使用这个命令一切都很好,我得到了想要的结果

我不知道为什么我的Dockerfile不能工作,但是命令行可以。
任何帮助都将不胜感激

我认为使用以下命令行可以获得相同的结果:

COPY /deflate.conf ../../../etc/apache2/mods-available/deflate.conf

在Dockerfile中。

为什么不使用绝对路径的“复制”或“添加”。与其使用
。/../../etc/apache2/mods available/deflate.conf
,不如使用以下格式:

COPY /deflate.conf /etc/apache2/mods-available/deflate.conf
您还可以为此使用Docker卷。在
docker build
期间忽略复制,然后使用
运行
,包括
-v
选项:

$ docker run -v  /deflate.conf:/etc/apache2/mods-available/deflate.conf -d -p 80:80 test

这也应该起到作用。请注意,
/etc/apache2/mods available/
上的模块在apache服务启动时默认不加载,活动模块应复制到
/etc/apache2/mods enabled/

上,我认为这也可以工作,但当我使用该命令时,我构建并运行它,但容器立即失败。docker构建-t测试。接着是docker运行-d-p80:80测试。然后我运行docker ps,但没有运行任何容器。可以发布失败容器的日志。您可以使用docker logs“container id”来获取运行docker ps-a的logsim,以获取失败容器的id,但当我运行docker logs“id”时,它会显示“无效命令”\xc2\xa0“,可能拼写错误或由未包含在服务器配置中的模块定义”看起来像deflate.conf中的坏字符。纯粹的猜测,可能是
docker cp
正在修改编码/其他东西,甚至可能是它使用的底层go库的一些实现细节,但是
COPY
/
ADD
正是复制文件的过程,导致一个工作,另一个不工作。我的建议是将文件内容复制到剪贴板,然后以纯文本的形式粘贴回去,或者在文本编辑器中打开额外的字符/编码。谢谢您的反馈。如果是这样的话,那么命令行中的cp命令不是也能正常工作吗?正如我上面所建议的,这两种操作不是同一个代码。它可能是一个实现细节。