我想修改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”。
我按以下步骤执行此操作:
使用端口6479启动redis-server
docker run -d -p 6479:6379 docker.io/redis
使用相同的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"
这里'docker run'的命令是: “/ bin / echo'laftof 192.168.1.149 6479'>> /etc/redis.conf&&&&&&&&&&&&&&&&&&&&&&&&&&
然而,我在第二步停了下来。它返回了如下错误消息:
/entrypoint.sh:line 10:/ bin / echo'weveof 192.168.1.149 6479'>> /etc/redis.conf&&&&& redis-server /etc/redis.conf:没有这样的文件或 目录
那么,如何通过'docker run'子句注入或修改conf文件?
答案 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"