gpt4 book ai didi

shell - 如何从 'docker run .... [command]' 追加/修改 docker 容器中的文件

转载 作者:IT王子 更新时间:2023-10-29 06:14:14 24 4
gpt4 key购买 nike

我想修改 docker 镜像中的 conf 文件,但是,我不想重新构建 docker 镜像,相反,我想通过“docker run .... COMMAND”来执行此操作 。我将在命令中放入“echo XXX >>/etc/XXX.conf”。这可能吗?

比如我想启动一个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 的从属 redis-server,并在 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. 启动sentinel,这是另一个docker images。

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

/entrypoint.sh: line 10: /bin/echo 'slaveof 192.168.1.149 6479' >> /etc/redis.conf && redis-server /etc/redis.conf: No such file or directory

那么,如何通过“docker run”子句注入(inject)或修改 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

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

docker exec -ti aaaaa  /bin/bash

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

docker exec -ti aaaaa /some/command

那个/some/command 将在容器内执行的地方......所以在你的情况下是这样的

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

关于shell - 如何从 'docker run .... [command]' 追加/修改 docker 容器中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36880890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com