使用docker start命令时强制容器保持活动状态

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

例如,我使用nginx容器,然后进入该容器以更改其配置。然后我停止并启动它以使其重新加载,但它立即关闭。

例如,日志给我:

nginx: [emerg] unknown log format "upstream_time" in /etc/nginx/conf.d/main.conf:17

现在我知道如何修复它,但是我必须访问此容器,才能访问它,该容器必须正在运行。

我如何强制docker使用docker start命令(而不是docker run)启动容器并强制其存活?

docker docker-for-windows
2个回答
2
投票

您可以将文件复制到本地主机,然后编辑它:

docker cp my_CON:/etc/nginx/conf.d/main.conf .

编辑后重新复制到容器:

docker cp  main.conf my_CON:/etc/nginx/conf.d/main.conf

然后重新开始


0
投票

一个Docker容器包装了一个进程。如果您执行某些操作导致该进程退出,则容器将始终退出,并且实际上没有任何解决方法。

通常,您不应该直接在容器内编辑文件。最关键的是,您删除容器后,您所做的任何更改都将丢失,并且删除容器是非常常规的操作。许多容器也只是不包含您可以使用的编辑器。

[@ LinPy的答案和@Adiii的评论之间的最佳做法。首先,从容器中复制现有的配置文件(如果尚未安装的话)。

docker cp my_CON:/etc/nginx/conf.d/main.conf .

现在对该文件进行所需的任何编辑。停止并删除现有容器,然后使用作为绑定安装卷插入的此修改后的配置文件重新启动它。

docker stop my_CON
docker rm my_CON
docker run \
  --name my_CON \
  -v $PWD/main.conf:/etc/nginx/conf.d/main.conf \
  -p ... \
  nginx:alpine

原则上,您可以直接在主机上编辑文件,更改将反映在容器中。 (有许多关于此操作无法正常运行的SO报告。)如果服务器实时重新加载配置并在错误时退出,则可以修复配置并重新运行相同的docker run命令以使其再次运行。

这样的卷装载非常适合推入配置文件。您可以在/var/log或类似位置装载空目录,以取出日志文件。他们需要保留所有需要在容器运行期间保留的数据。对于nginx,调用静态HTML / JS / CSS / ...内容就足够了,您需要提供“数据”并以这种方式注入它。

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