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

Nix*_*ill 7 docker docker-compose

让说我已经运行的业务流程与docker-compose使用docker-compose.yml看起来像这样:

version: '2.2'

services:

  service1:
    # ...
    networks:
      - compose_network

  service2:
    # ...
    networks:
      - compose_network

networks:
  compose_network:
Run Code Online (Sandbox Code Playgroud)

我的目标是运行一个容器并将其临时连接到compose_network_1。我尝试使用

$ docker run --net=compose_network <image for the job>
Run Code Online (Sandbox Code Playgroud)

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

我有办法做到吗?

max*_*axm 6

网络名称将类似于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
Run Code Online (Sandbox Code Playgroud)

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


sci*_*lot 6

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

来自docker run --help

      --network string   Connect a container to a network (default "default")
Run Code Online (Sandbox Code Playgroud)

如@maxm所示,您可以找到网络名称,该网络名称带有compose项目目录的DIR前缀,然后只需尝试运行即可:

$ docker run --network=DIR_compose_network <image for the job>
Run Code Online (Sandbox Code Playgroud)

我想在运行时进行连接,因为我的容器是瞬态的(正在运行测试),所以我不能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
Run Code Online (Sandbox Code Playgroud)

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