停止在Docker容器内运行的服务而不停止整个容器

时间:2020-09-03 17:21:28

标签: docker service couchbase

我有一个运行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

我只想在沙发上停止该长沙发服务器服务,这可能吗?还是覆盖我的配置文件的替代解决方案?

1 个答案:

答案 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

出于两个原因,诸如servicesystemctl之类的命令在Docker中根本不起作用。通常,容器运行的服务器进程是作为主容器进程运行的前台进程。没有初始化系统或任何后台进程,并且如果服务器进程退出,则容器将随之退出。