我有两个独立的docker-compose。Yml文件在两个不同的文件夹:

~/front/docker-compose.yml ~/api/docker-compose.yml

我如何确保前面的容器可以在api中向容器发送请求?

我知道——default-gateway选项可以使用docker run为单个容器设置,这样就可以为该容器分配特定的IP地址,但似乎在使用docker-compose时这个选项不可用。

目前,我结束了一个docker检查my_api_container_id,并查看输出中的网关。它是有效的,但问题是这个IP是随机分配的,所以我不能依赖它。

这个问题的另一种形式可能是:

我可以使用docker-compose将一个固定的IP地址归属于特定的容器吗?

但最终我所追求的是:

两个不同的docker-compose项目如何相互通信?


当前回答

从Compose 1.18(规范3.5)开始,您可以使用自己的自定义名称覆盖您需要的所有Compose YAML文件的默认网络。这很简单,只需添加以下内容:

networks:
  default:
    name: my-app

以上假设您的版本设置为3.5(或更高,如果他们在4+不弃用的话)。

其他的答案也指向了同样的观点;这是一个简化的摘要。

其他回答

对于使用另一个docker-compose网络,你只需要做这些(在docker-compose之间共享网络): 使用up -d运行第一个docker-compose项目 找到第一个docker的网络名称-通过:docker network ls(它包含根目录项目的名称) 然后在第二个docker-compose文件中使用下面这个结构的名称。

第二个docker-compose.yml

version: '3'
services:
  service-on-second-compose:  # Define any names that you want.
    .
    .
    .
    networks:
      - <put it here(the network name that comes from "docker network ls")>

networks:
  - <put it here(the network name that comes from "docker network ls")>:
    external: true

从Compose 1.18(规范3.5)开始,您可以使用自己的自定义名称覆盖您需要的所有Compose YAML文件的默认网络。这很简单,只需添加以下内容:

networks:
  default:
    name: my-app

以上假设您的版本设置为3.5(或更高,如果他们在4+不弃用的话)。

其他的答案也指向了同样的观点;这是一个简化的摘要。

version: '2'
services:
  bot:
    build: .
    volumes:
      - '.:/home/node'
      - /home/node/node_modules
    networks:
      - my-rede
    mem_limit: 100m
    memswap_limit: 100m
    cpu_quota: 25000
    container_name: 236948199393329152_585042339404185600_bot
    command: node index.js
    environment:
      NODE_ENV: production
networks:
  my-rede:
    external:
      name: name_rede_externa

另一种选择是运行第一个模块,使用“docker-compose”检查与模块相关的ip,并将第二个模块与之前的网络连接,如外部,并指向内部ip

例子 App1 -在服务行中创建的new-network,在底部标记为external: true App2 -表示由app1创建的“新网络”,在底部标记为external: true,并在配置中设置为连接,app1在此网络中的IP。

有了这个,你们就能互相交谈了

*这种方法只是针对局部测试,为了不做过于复杂的配置 **我知道这是非常“补丁的方式”,但对我来说很管用,我认为这是如此简单,其他人可以利用这一点

更新:作为撰写文件版本3.5:

现在可以工作了:

version: "3.5"
services:
  proxy:
    image: hello-world
    ports:
      - "80:80"
    networks:
      - proxynet

networks:
  proxynet:
    name: custom_network

Docker-compose up -d将加入一个名为“custom_network”的网络。如果它不存在,它将被创建!

root@ubuntu-s-1vcpu-1gb-tor1-01:~# docker-compose up -d
Creating network "custom_network" with the default driver
Creating root_proxy_1 ... done

现在,你可以这样做:

version: "2"
services:
  web:
    image: hello-world
    networks:
      - my-proxy-net
networks:
  my-proxy-net:
    external:
      name: custom_network

这将创建一个位于外部网络上的容器。

我在文档中找不到任何参考资料,但它是有效的!