无法从docker修改容器中的文件
我试图通过修改现有图像中的一些文件来构建图像。但是,无法从docker修改容器中的文件,docker,dockerfile,Docker,Dockerfile,我试图通过修改现有图像中的一些文件来构建图像。但是,RUN命令不会更改文件。我的文件是 FROM vromero/activemq-artemis ADD . . RUN ls RUN whoami # Overwrite existing password file. The existing file is invulnerable, and # cannot be modified by docker. I have no idea why. RUN rm -f /var/lib
RUN
命令不会更改文件。我的文件是
FROM vromero/activemq-artemis
ADD . .
RUN ls
RUN whoami
# Overwrite existing password file. The existing file is invulnerable, and
# cannot be modified by docker. I have no idea why.
RUN rm -f /var/lib/artemis/etc/artemis-users.properties
RUN ls -l /var/lib/artemis/etc
RUN mv passwords.txt /var/lib/artemis/etc/artemis-users.properties
RUN cat /var/lib/artemis/etc/artemis-users.properties
RUN touch /var/lib/artemis/etc/touch-test
# Add the predefined queues
RUN sed -i.bak '/<core/r queues.xml' /var/lib/artemis/etc/broker.xml
# EOF
为什么这些文件没有被
运行命令更改?这不是一个完整的答案,但至少是一个线索:您没有更改生成映像的入口点。
这意味着您的图像仍将执行其中的一个,根据其属性:
并且可能会在docker run
上重置一些更改。Dockerfile中有两个run
命令
您正在运行此命令:RUN
(命令在shell中运行-/bin/sh-c
(shell形式)
另一个是:RUN[“executable”,“param1”,“param2”]
(exec表单)
试试这个:
RUN ["rm", "-f", "/var/lib/artemis/etc/artemis-users.properties"]
RUN ["ls", "-l", "/var/lib/artemis/etc"]
RUN ["mv", "passwords.txt", "/var/lib/artemis/etc/artemis-users.properties"]
RUN ["cat", "/var/lib/artemis/etc/artemis-users.properties"]
RUN ["touch", "/var/lib/artemis/etc/touch-test"]
# Add the predefined queues
RUN ["sed", "-i.bak", "'/<core/r queues.xml'", "/var/lib/artemis/etc/broker.xml"]
RUN[“rm”、“-f”、“/var/lib/artemis/etc/artemis-users.properties”]
运行[“ls”、“-l”、“/var/lib/artemis/etc”]
运行[“mv”、“passwords.txt”、“/var/lib/artemis/etc/artemis users.properties”]
运行[“cat”,“/var/lib/artemis/etc/artemis users.properties”]
运行[“touch”,“/var/lib/artemis/etc/touch test”]
#添加预定义的队列
运行[“sed”、“-i.bak”、“/实际问题与基本映像的构建方式有关。如果运行docker history--no trunc vromero/activemq artemis
,则会看到以下命令(以及其他命令):
6周前/bin/sh-c#(nop)卷[/var/lib/artemis/etc] 0 B
6周前/bin/sh-c#(nop)卷[/var/lib/artemis/tmp] 0 B
6周前/bin/sh-c#(nop)卷[/var/lib/artemis/data] 0 B
美国
注意:如果有任何生成步骤,则在生成之后更改卷内的数据
已声明,则将放弃这些更改
这意味着基本映像中的配置已锁定
我通过基于历史命令的输出创建自己的dockerfile解决了问题,没有卷
行。我怀疑这是否相关。如果查看docker输出,请参见步骤4RUN
srm-f/var/lib/artemis/etc/artemis users.properties
。步骤5RUN
sls-l/var/lib/artemis/etc
,它显示了上一步试图删除的文件。入口点不能撤消更改,因为它已经撤消,或者在使用入口点之前很久没有发生。@TroyDaniels我同意。我的意思是作为一个起点:检查、尝试并重写入口点,以确保它不是罪魁祸首。当另一个表单不起作用时,这有什么原因吗?请查看文档-。与shell表单不同,exec表单不调用命令shell。
此外,/bin/sh
与/bin/bash
或其他shell不同。这似乎比我的答案更准确;)+1i故意使用音量,这样人们就可以扩展图像而不扩展,但显然我阻止了人们试图扩展。我会研究这个问题。尽管如此,自由地提出请求或建议改变,我将高兴地合并。这说,如果你只需要改变用户名和密码,考虑以下参数:@ v ito CTO。谢谢。我需要做更多的更改,而不仅仅是用户名和密码。我最终创建了一个docker文件,该文件是您的副本,删除了VOLUME语句,然后进行了所需的更改。我不清楚您如何公开这些目录,并允许人们在扩展dockerfile中进行更改。
$ docker run -it effd394fc02f bash
root@51d1cc0a94cb:/var/lib/artemis/bin# ls -l
total 16
-rw-r--r-- 1 root root 543 Oct 21 22:12 Dockerfile
-rwxrwxr-x 1 artemis artemis 3416 Oct 4 05:40 artemis
-rwxrwxr-x 1 artemis artemis 3103 Oct 4 05:40 artemis-service
-rw-r--r-- 1 root root 329 Oct 21 22:18 queues.xml
root@51d1cc0a94cb:/var/lib/artemis/bin# cd ../etc
root@51d1cc0a94cb:/var/lib/artemis/etc# ls -l
total 24
-rw-r--r-- 1 artemis artemis 959 Oct 4 05:40 artemis-roles.properties
-rw-r--r-- 1 artemis artemis 968 Oct 4 05:40 artemis-users.properties
-rwxrwxr-x 1 artemis artemis 1342 Oct 4 05:40 artemis.profile
-rw-r--r-- 1 artemis artemis 1302 Oct 4 05:40 bootstrap.xml
-rw-r--r-- 1 artemis artemis 4000 Oct 4 05:40 broker.xml
-rw-r--r-- 1 artemis artemis 2203 Oct 4 05:40 logging.properties
ENTRYPOINT ["/docker-entrypoint.sh"]
RUN ["rm", "-f", "/var/lib/artemis/etc/artemis-users.properties"]
RUN ["ls", "-l", "/var/lib/artemis/etc"]
RUN ["mv", "passwords.txt", "/var/lib/artemis/etc/artemis-users.properties"]
RUN ["cat", "/var/lib/artemis/etc/artemis-users.properties"]
RUN ["touch", "/var/lib/artemis/etc/touch-test"]
# Add the predefined queues
RUN ["sed", "-i.bak", "'/<core/r queues.xml'", "/var/lib/artemis/etc/broker.xml"]
<id> 6 weeks ago /bin/sh -c #(nop) VOLUME [/var/lib/artemis/etc] 0 B
<id> 6 weeks ago /bin/sh -c #(nop) VOLUME [/var/lib/artemis/tmp] 0 B
<id> 6 weeks ago /bin/sh -c #(nop) VOLUME [/var/lib/artemis/data] 0 B