我有一个运行Couchbase的Docker容器,我需要对其执行一项操作,该操作需要临时停止服务器服务。 这是覆盖容器中的某些配置文件所必需的。操作步骤如下所述。
docker exec -it "bumblebase" bash -c "systemctl stop couchbase-server"
docker exec -it "bumblebase" bash -c "echo \"{rest_port, 3456}.\" >> \"/opt/couchbase/etc/couchbase/static_config\""
docker exec -it "bumblebase" bash -c "rm -rf /opt/couchbase/var/lib/couchbase/config/config.dat"
docker exec -it "bumblebase" bash -c "systemctl start couchbase-server"
运行此命令会给我以下错误;
Failed to connect to bus: No such file or directory
我只从following stackoverflow answer找到了一种解决方法。但是,我不能修改“ couchbase”默认图像,并且将替代图像标记为暂时不维护。
我还尝试了couchbase documentation的替代命令:
docker exec -it "bumblebase" bash -c "service couchbase-server stop"
但是我还有另一个错误:
couchbase-server: unrecognized service
我只想在沙发上停止该长沙发服务器服务,这可能吗?还是覆盖我的配置文件的替代解决方案?
答案 0 :(得分:1)
通常不停止容器中的进程,而停止整个容器本身。实际上,在这种情况下,删除并重新创建容器非常普遍。相应地,您不应该使用docker exec
来编辑容器内的文件;在常规重启时会丢失。
如果还没有的话,可以将配置文件复制到容器中
docker cp bumblebase:/opt/couchbase/etc/couchbase/static_config .
现在,您可以使用选择的编辑器来编辑配置文件的本地副本。
最后,您可以停止,删除和重新创建容器。 docker run -v
选项可以将单个配置文件注入到容器中。
docker stop bumblebase
docker rm bumblebase
docker run \
-d \
-p 8091-8094:8091-8094 -p 11210:11210 \
--name bumblebase \
-v $PWD/static_config:/opt/couchbase/etc/couchbase/static_config \
couchbase:community-6.6.0
出于两个原因,诸如service
或systemctl
之类的命令在Docker中根本不起作用。通常,容器运行的服务器进程是作为主容器进程运行的前台进程。没有初始化系统或任何后台进程,并且如果服务器进程退出,则容器将随之退出。