在不停止整个容器的情况下停止 docker 容器内的服务 运行
Stop service running inside a docker container without stopping the whole container
我有一个 docker 容器 运行 Couchbase,我需要对其执行一个操作,需要 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
我只从 following Whosebug answer 中找到了一种解决方法。但是,我不喜欢修改 couchbase 默认图像,而且备用图像现在被标记为暂时未维护。
我还尝试了来自 couchbase documentation 的替代命令:
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 中根本不起作用。通常,容器运行的服务器进程是作为主容器进程运行的前台进程;没有初始化系统或任何后台进程,如果服务器进程退出,容器将随之退出。
我有一个 docker 容器 运行 Couchbase,我需要对其执行一个操作,需要 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
我只从 following Whosebug answer 中找到了一种解决方法。但是,我不喜欢修改 couchbase 默认图像,而且备用图像现在被标记为暂时未维护。
我还尝试了来自 couchbase documentation 的替代命令:
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 中根本不起作用。通常,容器运行的服务器进程是作为主容器进程运行的前台进程;没有初始化系统或任何后台进程,如果服务器进程退出,容器将随之退出。