假设我在docker-compose
和docker-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
,所以我也尝试了该变体,但结果相同。
有没有办法做到这一点?
答案 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
组成容器。应该与您的命令具有完全相同的功能,只是添加了别名。