如何在“docker run .... [command]”中添加/修改docker容器中的文件

时间:2016-04-27 05:17:38

标签: shell docker redis

我想修改docker镜像中的conf文件,但是,我不想重新构建docker镜像,而是我想通过“docker run .... COMMAND”来做这个即可。我将把“echo XXX>> /etc/XXX.conf”放入COMMAND。这有可能吗?

例如,我想启动一个redis sentinel集群,其中包括至少2个redis-server和1个redis-sentinel。第二个redis-server容器需要在redis.conf中声明“slaveof”。

我按以下步骤执行此操作:

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

  2. 使用相同的docker镜像启动带有6579的slave redis-server,并在conf文件中声明它是slave: 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"

  3. 这里'docker run'的命令是: “/ bin / echo'laftof 192.168.1.149 6479'>> /etc/redis.conf&&&&&&&&&&&&&&&&&&&&&&&&&&

    1. 启动哨兵,这是另一个码头图像。
    2. 然而,我在第二步停了下来。它返回了如下错误消息:

        

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

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

1 个答案:

答案 0 :(得分:1)

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

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

如果您需要登录正在运行的容器问题

docker exec -ti aaaaa  /bin/bash

它将为您提供容器内的交互式shell会话,您可以随意发出命令...如果您只想在正在运行的容器内发出命令而没有交互式方面问题

docker exec -ti aaaaa /some/command

其中/ some /命令将在容器内执行...所以在你的情况下是这样的

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