Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将现有Docker容器迁移到Docker Compose_Docker_Docker Compose - Fatal编程技术网

将现有Docker容器迁移到Docker Compose

将现有Docker容器迁移到Docker Compose,docker,docker-compose,Docker,Docker Compose,我有几个由经典Docker命令启动的运行容器。这些容器使用的Docker网络也是“手工”创建的: 我想使用Docker Compose来运行这些容器,因为这样更易于管理 是否可以像下面那样将这些容器迁移到Docker Compose,或者只可以将Compose与新容器一起使用 我希望在此迁移期间使用相同的卷!停机不是问题 docker compose.yml version: '2' docker-registry: image: registry:2.3.0 ports: -

我有几个由经典Docker命令启动的运行容器。这些容器使用的Docker网络也是“手工”创建的:

我想使用Docker Compose来运行这些容器,因为这样更易于管理

是否可以像下面那样将这些容器迁移到Docker Compose,或者只可以将Compose与新容器一起使用

我希望在此迁移期间使用相同的卷!停机不是问题

docker compose.yml

version: '2'

docker-registry:
  image: registry:2.3.0
  ports:
    - "5000:5000"
  volumes: 
    - [...]

docker-registry-web:
  image: hyper/docker-registry-web
  expose:
    - "8080"
  volumes: 
    - [...]

nginx:
  image: nginx:1.9.8
  ports:
    - "80:80"
    - "443:443"
  volumes: 
    - [...]

我相信撰写的目的是运行多容器应用程序。尽管您可能会得到类似的设置,但您似乎不太可能在docker compose环境中实际拉动正在运行的docker容器。

要重新使用您可以使用的现有网络

networks:
  default:
    external:
      name: simple-network
要重用卷,这取决于卷的类型。如果它们是命名卷,则可以执行类似操作:

volumes:
  data:
    external:
      name: the_name_of_the_volume
然后在服务中使用
卷:[data]

如果它们是主机卷,那么就很容易了,只需使用相同的配置即可

如果它们是未命名卷,则可以将卷id用作外部卷(与使用命名卷的方式相同)

重复使用容器是不可能的。您可以让docker创建Compose接管容器,但它们需要有正确的
标签。查找标签的最简单方法是
docker检查由compose创建的容器,以查看键/值。由于您必须重新创建一个容器来应用标签,因此可能更容易停止它们并编写。

更新重用命名卷的部分示例,以防对下一个人有所帮助:

看起来在docker-compose.yml的卷部分,您不应该再使用
name:name\u of_卷
,只需使用名称定义它们,例如

volumes:
  app-mongo-data:
    external: true
  app-mongo-config:
    external: true
然后(在本例中)通过
app mongo data
app mongo config
在您的服务中引用它们,如下所示:

version:'3'
services:
    app-db:
        image: mongo:latest
        expose:
          - "27017"
        volumes:
          - app-mongo-data:/data/db
          - app-mongo-config:/data/configdb
可能有助于解决这个问题的网络方面(尽管不是问什么):docker-compose.yml上面的行来自于允许我使用

appdb:27017

因为compose包含一个列表服务的名称解析程序,并且端口已向此compose启动的所有服务公开


有趣的问题。请注意,如果执行
docker kill container1 container2…,停机时间将是最小的。。。;docker compose up-d
。然而,容器将与该方法不完全相同。
version:'3'
services:
    app-db:
        image: mongo:latest
        expose:
          - "27017"
        volumes:
          - app-mongo-data:/data/db
          - app-mongo-config:/data/configdb