【问题标题】:Running a docker container in a docker network which is already created by a docker-compose在已经由 docker-compose 创建的 docker 网络中运行 docker 容器
【发布时间】:2021-07-06 19:50:36
【问题描述】:

为了为我正在处理的项目实施集成测试,需要通过将服务作为 docker 容器来运行集成测试。因此,有 2 个服务在整个测试过程中保持固定状态,这些服务被添加到 docker-compose 文件中。我在测试开始时启动这些服务。之后,对于一组测试,我需要使用 docker run 命令启动另一个服务,并将该服务添加到我作为 docker-compose 启动前两个服务时创建的同一网络中。这可能吗?

我尝试了以下步骤以确保将 docker 容器添加到由 docker-compose 创建的网络是否可行。

  1. docker-compose 文件示例。
version: '3.7'
services:
  backend_service_1:
    image: solsson/http-echo
    networks:
      - envoymesh
    environment:
      - PORT=8000 

networks:
  envoymesh:
    name: envoymesh
    driver: bridge

  1. 运行另一个 docker 容器并尝试添加到同一个网络。
docker run solsson/http-echo -e PORT=9000 --network=envoymesh --driver=bridge
  1. 运行docker network inspect envoymesh 以查看网络中的容器。但我只看到来自 docker-compose 的容器。
 "Containers": {
            "bd3c1b20be141cc66144f24a7e7adeaaa894e694004139f88f2b9563c729e8e1": {
                "Name": "docker-network_backend_service_1_1",
                "EndpointID": "d43f97ef5f0948ed2f6c7e4045164439ebf2596176868efcf6640927c1bc376e",
                "MacAddress": "02:42:ac:1b:00:02",
                "IPv4Address": "172.27.0.2/16",
                "IPv6Address": ""
            }
        },

我在这里做错了什么?能不能达到我的要求??提前致谢。

PS:docker network connect envoymesh [container id] 有效。


解决方案

这是我使用 docker run 命令的方式的问题。它应该像下面这样使用,最后带有图像名称。

docker run -e PORT=8000 --network envoymesh solsson/http-echo

【问题讨论】:

    标签: docker docker-compose docker-networking


    【解决方案1】:

    我不确定为什么docker run 命令不起作用,但您是否尝试过:

    docker network connect envoymesh container-name
    

    命令格式:

    docker network connect [OPTIONS] NETWORK CONTAINER
    

    说明:

    将容器连接到网络。您可以按名称或 ID 连接容器。一旦连接,容器就可以与同一网络中的其他容器通信。

    来源:network connect

    【讨论】:

    • 是的,它有效,但我希望它与运行命令一起使用,因为我从源代码中调用这些命令,并且在单个命令中运行时更简洁。谢谢
    • 你可以试试 --network='|' 或 --network='container:' 第二个标签允许新容器重用另一个容器的网络堆栈。
    • 我试过--network='<network-name>|<network-id>' ,这就是问题中提到的。容器的网络堆栈无法满足我的要求。
    • 你试过这个--network='container:<name|id>'
    • 它似乎在这里工作,因为只有 2 个容器。但就我而言,添加到容器的网络堆栈是行不通的。
    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多