无法从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输出,请参见步骤4
RUN
s
rm-f/var/lib/artemis/etc/artemis users.properties
。步骤5
RUN
s
ls-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