如何追加/修改docker容器中的文件从docker运行… '

我想在Docker镜像中修改conf文件,但是我不想重新构builddocker镜像,而是想通过“docker run …. COMMAND”来执行此操作 。 我会把一个“echo XXX >> /etc/XXX.conf”放到COMMAND中。 这可能吗?

例如,我想启动一个redis sentinel集群,其中包括至less2个redis-server和1个redis-sentinel。 第二个redis服务器容器在redis.conf中需要状态“slaveof”。

我按照以下步骤做到这一点:

  1. 启动redis-server与端口6479 docker run -d -p 6479:6379 docker.io/redis

  2. 通过使用相同的docker图像启动从属redis服务器与6579,并说明它是一个奴隶在conf文件中: docker run -d -p 6579:6379 docker.io/redis "/bin/echo 'slaveof 192.168.1.149 6479' >> /etc/redis.conf && redis-server /etc/redis.conf"

这里“docker run”的命令是:“/ bin / echo'slaveof 192.168.1.149 6479'>> /etc/redis.conf && redis-server /etc/redis.conf”

  1. 开始哨兵,这是另一个docker的图像。

但是,我在第二步停了下来。 它返回如下错误消息:

/entrypoint.sh:第10行:/ bin / echo'slaveof 192.168.1.149 6479'>> /etc/redis.conf && redis-server /etc/redis.conf:没有这样的文件或目录

那么,如何通过“docker run”子句注入或修改conf文件呢?

首先启动你的容器,给它一些名字,你稍后需要它(比查找容器id更容易)

 docker run --name container-name -d -p 6479:6379 docker.io/redis docker run --name aaaaa -d -p 6479:6379 docker.io/redis 

如果您需要login到正在运行的容器问题

 docker exec -ti aaaaa /bin/bash 

这将给你一个在容器内的交互式shell会话,你可以随意发出命令…如果你只想在一个正在运行的容器内发出一个没有交互式方面问题的命令

 docker exec -ti aaaaa /some/command 

在那里/一些/命令将在容器内执行…所以你的情况是这样的

 docker exec -ti aaaaa "/bin/echo 'slaveof 192.168.1.149 6479' >> /etc/redis.conf && redis-server /etc/redis.conf"