事情是这样的,我先运行了一个docker容器,然后再这个docker容器中部署了一个web应用:
可以看到容器rust_cms的运行命令是/bin/bash
,现在想让这个容器自动启动并且启动后运行web服务.自动启动可以使用docker update
更改启动策略,如:
docker update --restart always rust_cms
但docker update不支持修改COMMAND
,每次docker重新启动还是要手动去启动web服务,怎么办呢?
方法一
想到的第一个方法是使用docker commit
把当前容器保存为镜像再使用新的镜像启动一个新的容器,在执行docker run
启动新容器时就可以指定新的运行命令了。
感觉这个方法还得重新设置端口什么的比较麻烦,能不能直接修改docker容器的配置文件呢?这样显然比较暴力风险比较大。
方法二
使用docker inspect找到容器rust_cms配置文件所在目录
目录下的config.v2.json
就是容器的配置文件了,如果你使用的docker版本比较低也可能是config.json。
找到文件就动手修改吧,修改前请停止docker服务并先备份config.v2.json文件以防改失败了好回滚:
把文件中的命令/bin/bash
替换为新的命令:
再重启下docker服务:
systemctl start docker
查看容器是否启动成功:
从状态信息:
Restarting (101) 4 seconds ago
可以看出容器启动失败了,这是为什么呢?
是启动web服务器时忘记设置当前目录了,索性在config.v2.json文件里把当前工作目录也改了:
再次启动docker服务,就正常了:
如果执行命令比较麻烦,可能方式一还快些.
补充:
操作系统 centos 7
docker version Client: Docker Engine - Community Version: 20.10.3 API version: 1.41 Go version: go1.13.15 Git commit: 48d30b5 Built: Fri Jan 29 14:34:14 2021 OS/Arch: linux/amd64 Context: default Experimental: trueServer: Docker Engine - Community Engine: Version: 20.10.3 API version: 1.41 (minimum version 1.12) Go version: go1.13.15 Git commit: 46229ca Built: Fri Jan 29 14:32:37 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.3 GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b runc: Version: 1.0.0-rc92 GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff docker-init: Version: 0.19.0 GitCommit: de40ad01234567891011121314151617181920212223242526272829