目录
问题
解决
参考链接
问题
自己在原有镜像1.0的基础上,修改了一个问题,重新编译打包新镜像2.0,然后更新了 docker-compose.yml 中的版本号,停止并启动容器,发现原来的问题还没有解决。但是,自己明明已经改了。很奇怪!
解决
步骤一、确认新镜像中可执行程序是否正确
使用新镜像,启动一个容器服务,进入容器,发现可执行程序已经是最新了。
使用可执行程序特定的版本检查命令可以知道是新包,命令如下:
./bag -v
步骤二、 查看当前容器依赖的镜像版本是否正确
既然新镜像本身是正确的,那么就需要看看当前运行的容器依赖的是不是最新的镜像包即可,执行如下命令查看:
docker inspect bag
果然有问题,通过执行结果(下图)可以知道,当前运行的容器依赖的还是之前的镜像版本。
那就奇怪了,明明 docker-compose.yml 文件中已经修改了版本号。
步骤三、验证更新命令是否正确
对别的容器使用相同的命令,验证是否可以正确更新镜像版本,验证命令如下:
docker-compose stop test
docker-compose start test
结果很打脸,确实也没有更新。但是,自己明明记得之前这样操作是有效的。于是,自己查看官方的介绍文档,其中也明确说明:docker-compose stop 只会停止当前容器,不会删除容器。因此,再执行 docker-compose start 命令之后,只会把原来的容器重新启动。所以,我们看到的现象就是镜像没有更新。尴尬😅!
这里补充一点,其实,除了 docker-compose stop 和 docker-compose start 命令之外还有一个神奇的命令 docker-compose restart,而且三者之间存在如下关系:
docker-compose restart = docker-compose stop + docker-compose start
嘿嘿,是不是很有意思。
步骤四、使用正确的更新命令
如果修改了 docker-compose.yml 中的配置信息,想让这些改动生效,可以使用如下命令:
docker-compose up -d
看到这个命令是不是很熟悉,是的,首次启动容器的时候也是使用这个命令。
如果这样不好理解的话,也可以使用如下组合命令来让 docker-compose.yml 中修改的配置生效:
docker-compose down
docker-compose up -d
其中,docker-compose down 命令会首先停止容器,然后再删除容器。因此,又有一个和上面类似的公示:
docker-compose down = docker-compose stop + docker-compose rm
注意:上文说的配置文件特指 docker-compose.yml 文件。如果 docker-compose.yml 文件又依赖了其他配置文件,比如 config.yml。如果修改了 config.yml 中的配置项,那么,docker-compose up -d 命令就不好使了,此时,我们就需要重启容器才可以,docker-compose restart 命令就开始“登台表演”了。
最后,我们看一组演示命令:
参考链接
docker-compose up | Docker Documentation