【问题标题】:Create service in docker-compose.yml base on running container基于正在运行的容器在 docker-compose.yml 中创建服务
【发布时间】:2021-01-08 21:30:03
【问题描述】:

我里面有一个 docker 和多个服务。但并不是每个正在运行的容器都在 docker-compose.yml 中。例如这里是我的 docker-compose.yml 文件。

version: '3'
services:
  db:
    image: postgres:latest
    environment:
      - POSTGRES_PASSWORD=test
      - POSTGRES_USER=test
      - POSTGRES_DB=test
    volumes:
      - ./db_data:/var/lib/postgresql/data

和正在运行的容器

testtesttest        plugin-test:latest          "/entrypoint.sh"         11 months ago        Up 25 hours         0.0.0.0:3002->80/tcp   dockerfiles_plugin-test_1

现在我想将此容器的服务添加到 docker-compose.yml 文件中。

我知道我可以运行 docker inspect testtesttest 来查看详细信息,但是在 docker-compose.yml 文件中重新创建服务的最佳方法是什么?

【问题讨论】:

    标签: docker


    【解决方案1】:

    您在docker-compose.yml 中定义的每个服务都对应于 docker-compose 将启动和管理的容器。您不能向撰写文件“添加现有容器”。

    如果您希望撰写服务与现有容器交互,您当然可以这样做。最简单的机制是确保您的 compose 容器与现有容器位于同一网络上。例如,假设您有一个名为 mynetwork 的现有网络(使用 docker network create mynetwork 创建),您可以像这样启动非撰写服务:

    docker run --network mynetwork ...
    

    你会像这样编写你的 compose 文件:

    version: '3'
    services:
      db:
        image: postgres:latest
        environment:
          - POSTGRES_PASSWORD=test
          - POSTGRES_USER=test
          - POSTGRES_DB=test
        volumes:
          - ./db_data:/var/lib/postgresql/data
        networks:
          mynetwork: {}
    
    networks:
      mynetwork:
        external: true
    

    这将mynetwork 定义为一个外部 网络——也就是说,一个在Docker compose 之外创建的网络。通过将您的 compose 容器与现有容器放在同一网络上,它们将能够通过名称相互引用。也就是说,如果您现有的容器被命名为dockerfiles_plugin-test_1,那么您的数据库将能够使用主机名dockerfiles_plugin-test_1 连接到它。

    如果您想换个方向并让dockerfiles_plugin-test_1 连接到数据库,您可能需要为数据库容器设置一个静态主机名(或别名):

    version: '3'
    services:
      db:
        image: postgres:latest
        environment:
          - POSTGRES_PASSWORD=test
          - POSTGRES_USER=test
          - POSTGRES_DB=test
        volumes:
          - ./db_data:/var/lib/postgresql/data
        networks:
          mynetwork:
            aliases:
              - db
    
    networks:
      mynetwork:
        external: true
    

    这为db 容器提供了网络mynetwork 上的主机名db

    【讨论】:

      猜你喜欢
      • 2016-08-21
      • 2017-06-25
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多