使用 docker 启动命令时强制容器保持活动状态
Force container to stay alive when using docker start command
例如,我使用 nginx
容器,然后我进入该容器以更改其配置。然后我停止并启动它让它重新加载,但它立即关闭。
例如日志给我:
nginx: [emerg] unknown log format "upstream_time" in /etc/nginx/conf.d/main.conf:17
现在我知道如何修复它了,但是我必须访问这个容器,为了能够访问它,这个容器必须是 运行。
如何使用 docker start
命令(而不是 docker run
)强制 docker 启动容器并强制其保持活动状态?
您可以将文件复制到您的本地主机,然后对其进行编辑:
docker cp my_CON:/etc/nginx/conf.d/main.conf .
编辑后重新复制到容器:
docker cp main.conf my_CON:/etc/nginx/conf.d/main.conf
然后重新开始
一个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
命令来获取又 运行ning 了。
像这样的卷挂载非常适合将配置文件推入。您可以在 /var/log
或类似的地方挂载一个空目录以输出日志文件。他们需要保留任何需要跨容器 运行 持久存在的数据。在 nginx 的情况下,调用静态 HTML/JS/CSS/... 您需要提供的内容 "data" 并以这种方式注入它是合理的。
例如,我使用 nginx
容器,然后我进入该容器以更改其配置。然后我停止并启动它让它重新加载,但它立即关闭。
例如日志给我:
nginx: [emerg] unknown log format "upstream_time" in /etc/nginx/conf.d/main.conf:17
现在我知道如何修复它了,但是我必须访问这个容器,为了能够访问它,这个容器必须是 运行。
如何使用 docker start
命令(而不是 docker run
)强制 docker 启动容器并强制其保持活动状态?
您可以将文件复制到您的本地主机,然后对其进行编辑:
docker cp my_CON:/etc/nginx/conf.d/main.conf .
编辑后重新复制到容器:
docker cp main.conf my_CON:/etc/nginx/conf.d/main.conf
然后重新开始
一个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
命令来获取又 运行ning 了。
像这样的卷挂载非常适合将配置文件推入。您可以在 /var/log
或类似的地方挂载一个空目录以输出日志文件。他们需要保留任何需要跨容器 运行 持久存在的数据。在 nginx 的情况下,调用静态 HTML/JS/CSS/... 您需要提供的内容 "data" 并以这种方式注入它是合理的。