问题描述
以前的项目是通过docker
来做简单的部署,容器数量最多也就三四个,所以一直都是通过docker start
命令一个一个的启动,后来运维觉得麻烦了,就通过shell
脚本来批量启动,但由于业务的增加,几个容器可能有点不够用,需要增加更多的容器,虽然shell
也能解决同样的问题,但处理像网络通信的问题来说还是比较麻烦的,有时候突然就联不通了。所以决定使用docker compose
做统一管理,但发现一个问题,线上使用的容器无法被docker compose
编排进去,即使在docker-compose.yml
做了相应的配置但使用docker-compose up
命令会提示容器名被占用,无法构建容器,无法构建那你给我启动啊,想法的好的,实际很残酷。也尝试过docker compose start
命令来启动容器,却提示容器不存在,这就奇了怪了,我用docker compose up
构建运行你提示已经存在,那我就直接启动吧,你却告诉我no container
,你这不前后矛盾吗。但如果明白原理的话还是能理解报错的原因,前一个提示容器名被占用那是docker run
的结果,后一个提示不存在,那是因为docker compose
压根没有构建,但想不通的是既然docker compose
是docker containers
的编排工具,按理来说应该是可以互通才对,但实际上并非如此,经过实验发现,docker
能够处理docker compose
构建的容器,但docker compose
却无法编排docker
构建的,如果从主从关系来看,确实是没问题的,但还是感觉比较鸡肋,线上的项目想要通过docker compose
来编排,只能将服务器停掉,然后将容器打包成镜像再通过docker compose
重新拉取镜像来部署,这么一来得消耗多少时间呢,客户能忍受吗,对于传统行业来说,客户使用不多的情况下,可能沟通一下,还能处理,但对于电商行业来说,这段时间的消耗其实是无法承受的,可能下一秒你的用户全部跑到其他平台了,所以为了解决这种问题找了不少的资料,但基本上都在介绍怎么使用docker compose
,并没有讲解过此类问题,也去看过官网的文档,但没有找到想要的东西,其实我想要的只是一个简单的配置,让docker compose
优先启动已有的容器,不管是docker compose
部署的还是docker
构建的,都能编排,就像java
的反射机制一样,你想要动class private field
只需要对field
设置允许即可,docker compose
不知道有没有这样的配置呢,如果有的话,怎么配置,如果没有将来会不会有,现阶段有没有代替的方案,希望有大佬给个建议,谢谢。
贴图
通过docker run
创建的容器
试图通过docker compose
来启动这两个容器(失败)
配置文件docker-compose.yml
修改docker-compose.yml
所有container_name
,与docker run
构建的所有容器区分开来
实验结果【成功构建两个新容器】
可以,Docker Compose 可以编排以前通过 docker run 构建运行的容器。要做到这一点,你需要执行以下步骤:
创建 Docker Compose 文件:创建一个名为 docker-compose.yml 的文件,其中包含以前通过 docker run 运行的容器的定义。该文件应指定容器的映像、端口映射和其他设置。例如:
version: "3"
services:
my-container:
image: my-image:latest
ports:
- "8080:8080"
停止并删除以前运行的容器:使用以下命令停止并删除以前通过 docker run 运行的容器:
docker stop my-container
docker rm my-container
使用 Docker Compose 运行容器:使用以下命令使用 Docker Compose 运行容器:
docker-compose up -d
这将根据 docker-compose.yml 文件中的定义启动并运行容器。
注意:
确保 docker-compose.yml 文件中的容器名称与以前通过 docker run 运行的容器的名称相同。
如果以前运行的容器使用卷,则需要在 docker-compose.yml 文件中指定卷。
如果以前运行的容器使用自定义网络,则需要在 docker-compose.yml 文件中指定网络。
一旦你按照这些步骤操作,Docker Compose 就可以编排以前通过 docker run 构建运行的容器。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。