使用docker run连接到docker-compose网络

时间:2018-10-14 16:54:29

标签: docker docker-compose

假设我在docker-composedocker-compose.yml一起进行编排,如下所示:

version: '2.2'

services:

  service1:
    # ...
    networks:
      - compose_network

  service2:
    # ...
    networks:
      - compose_network

networks:
  compose_network:

我旨在运行一个容器并将其暂时连接到compose_network_1。我尝试使用

$ docker run --net=compose_network <image for the job>

但是我无法连接。我还知道docker-compose将网络命名为[projectname]_default,所以我也尝试了该变体,但结果相同。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

我不确定--net选项是否曾经存在,但现在是--network

来自docker run --help

      --network string   Connect a container to a network (default "default")

正如@maxm所指出的,您可以找到网络名称,该网络名称带有撰写项目目录的DIR前缀,然后按照您的尝试运行它即可:

$ docker run --network=DIR_compose_network <image for the job>

我想在运行时进行连接,因为我的容器是瞬态的(正在运行测试),所以我不能在退出之前及时使用第二条docker network命令。

例如在没有指定网络名称的“ dev”文件夹中为我的docker组成文件使用docker-compose“默认”名称,因此我得到的名称为dev_default

docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2c660d9ed0ba        bridge              bridge              local
b81db348e773        dev_default         bridge              local
ecb0eb6e93a5        host                host                local

docker run -it --network dev_default myimage

这会将新的docker容器连接到现有的docker-compose网络。

答案 1 :(得分:1)

网络名称将类似于name-of-directory_compose_network。用docker network ls

查找名称

我在以下方面取得了成功:

docker-compose up # within directory ./demo
docker run -itd -p "8000:8000" --hostname=hello "crccheck/hello-world"
# outputs: 1e502f65070c9e2da7615c5175d5fc00c49ebdcb18962ea83a0b24ee0440da2b
docker network connect --alias hello demo_compose_network 1e502f65070c

然后我可以从docker内部的curl hello:8000组成容器。应该与您的命令具有完全相同的功能,只是添加了别名。