【问题标题】:How to link a container already running to my app using docker-compose如何使用 docker-compose 将已经运行的容器链接到我的应用程序
【发布时间】:2019-12-02 11:31:20
【问题描述】:

我需要将名为 proxy1proxy2 的 2 个容器链接到 myapp

proxy1proxy2 使用 docker 命令运行,myapp 使用 docker-compose.yml

我需要能够从容器 myapp

ping proxy1proxy2

我尝试在我的 docker-compose.yml 中像这样使用external_links

services:
  myapp:
    build: .
    ports:
      - 3000:3000
    external_links:
      - proxy1
      - proxy2

如果我创建 docker ps 我有这个:

CONTAINER ID        IMAGE               COMMAND                  STATUS              PORTS                                            NAMES
2f0365826670        myapp         "docker-entrypoint.s…"   Up About an hour    0.0.0.0:3000->3000/tcp, 0.0.0.0:8001->8001/tcp   myapp_myapp_1
bbd1f5340086        proxy         "supervisord -n"         Up 2 hours          127.0.0.1:5002->8080/tcp                         proxy2
6c3cd1eb6530        proxy         "supervisord -n"         Up 2 hours          127.0.0.1:5001->8080/tcp                         proxy1

如何从 myapp 访问这 2 个代理容器?

【问题讨论】:

    标签: docker docker-compose containers


    【解决方案1】:

    我建议您执行以下操作:

    创建一个网络:

    docker network create mynetwork
    

    将您的独立容器连接到网络:

    docker network connect mynetwork my_container
    

    更新你的 docker-compose:

    services:
      myapp:
        build: .
        ports:
          - 3000:3000
    networks:
      default:
        external:
          name: mynetwork
    

    其他方法是检查独立容器网络正在使用什么:

    docker inspect proxy1
    

    并在 compose 中将该网络用作外部网络。

    或者你可以在你的compose中使用network_mode: "host",不推荐

    【讨论】:

    • 当我尝试做 docker network connect mynetwork proxy1 我得到这个错误:Error response from daemon: failed to add interface veth984accd to sandbox: error setting interface "veth984accd" IP to 172.19.0.4/16: cannot program address 172.19.0.4/16 in sandbox interface because it conflicts with existing route {Ifindex: 2 Dst: 128.0.0.0/1 Src: <nil> Gw: 100.124.176.1 Flags: [] Table: 254}
    • 如果你想在你的 compose 中使用现有的 proxy1 网络,你可以使用 docker inspect proxy1
    • 好的超级,当我docker inspect proxy1 我得到"Networks": { "bridge": {... 所以我在我的docker-compose.yml 中使用bridge 作为network-mode,但是我如何从myapp ping 我的proxy1
    • 我使用了network_mode: host,这是解决我问题的最佳解决方案
    猜你喜欢
    • 2022-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多