我有一个运行 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 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 系统或任何后台进程,如果服务器进程退出,容器也会随之退出。
您还可以将配置文件从主机挂载到容器,编辑配置文件并重新启动容器