如何将已构建的docker容器添加到docker-compose?

时间:2018-06-13 12:05:30

标签: postgresql docker docker-compose docker-image

我有一个名为“postgres”的容器,使用plain docker命令构建,其中包含一个已配置的PostgreSQL。另外,我有一个docker-compose设置,有两个服务 - “api”和“nginx”。

如何将“postgres”容器添加到我现有的docker-compose设置作为服务,而无需重建? PostgreSQL数据库是手动配置的,并且填充了数据,因此重建是一个非常非常糟糕的选择。

我浏览了docker-compose文档,但遗憾的是没有重新构建就没办法做到这一点。

2 个答案:

答案 0 :(得分:0)

不幸的是,这是不可能的。

你没有在docker-compose上引用容器,你使用图像。

您需要创建一个卷和/或绑定它以保存您的数据库数据。

这是因为容器不保存数据,如果你用数据填充它并且没有为它创建绑定装置或卷,你将失去使用docker container stop的一切。

建议:

docker cp
  

Docker cp会将内容从容器复制到主机。 https://docs.docker.com/engine/reference/commandline/container_cp/

  1. 创建一个文件夹以保存所有PostgreSQL数据(例如:/ home / user / postgre_data /)
  2. 将PostgreSQL容器数据的内容保存到此文件夹(docker hub postgres页面以供进一步参考:;
  3. 运行一个新的PostgreSQL(相同版本)容器,其中一个绑定挂载poiting到新文件夹;
  4. 这将保留您的所有数据,您将能够将其装入或绑定,以便在docker-compose上使用。

      

    docker-compose volume的参考:https://docs.docker.com/compose/compose-file/#volumes

         

    postgres docker image的参考:https://hub.docker.com/_/postgres/

         

    卷和绑定坐骑的引用:https://docs.docker.com/storage/bind-mounts/#choosing-the--v-or---mount-flag

答案 1 :(得分:0)

您可以使用docker container commit将此容器保存在新图像中,并在docker-compose中使用新创建的图像

docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

但我更喜欢使用Dockerfiles和脚本来创建图像以填充我的数据等。