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

问题描述 投票:0回答:2

我有一个运行 Couchbase 的 docker 容器,我需要对其执行一项需要暂时停止 couchbase-server 服务的操作。 这是覆盖容器内的一些配置文件所必需的。操作步骤如下。

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

我只从以下 stackoverflow 答案中找到了一种解决方法。但是,我不喜欢修改 couchbase 默认图像,而且备用图像现在已标记为未维护一段时间。

我还尝试了 couchbase 文档中的替代命令:

docker exec -it "bumblebase" bash -c "service couchbase-server stop"

但是我又犯了一个错误:

couchbase-server: unrecognized service

我只是希望 couchbase-server 服务停止在容器内,这可能吗?或者它是覆盖我的配置文件的替代解决方案?

docker service couchbase
2个回答
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 中根本不起作用。通常容器运行的服务器进程是作为主容器进程运行的前台进程;没有 init 系统或任何后台进程,如果服务器进程退出,容器也会随之退出。


0
投票

您还可以将配置文件从主机挂载到容器,编辑配置文件并重新启动容器

© www.soinside.com 2019 - 2024. All rights reserved.