我可以使用Docker-Compose创建没有容器的网络

时间:2017-05-24 00:19:31

标签: networking docker docker-compose

过去几天我一直在玩Docker-Compose,看看它是否会简化我的Docker容器和网络构建过程。

我很满意它,但是当我想创建一些“网络”时遇到了问题。任何'服务'都没有使用它。 (尚)。

我想要这种行为的原因是有一个Docker-Compose文件来创建我的本地结构' Private'网络和公共'网络。还有一个单独的Docker-Compose,用于我的每个项目,这些项目利用已经创建的那些'外部'网络

我注意到我只能指定一个虚拟容器来初始化网络的创建,但似乎没必要。 e.g ..

version: '2'
services:
  # Dummy Service
  dummy:
    image: busybox
    container_name: dummy
    hostname: dummy
    networks:
      private:

networks:
  # Private Network for all Services (across Projects)
  private:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 172.18.0.0/24
        gateway: 172.18.0.1

是否有我忽略的设置/标记,或者目前无法使用Docker-Compose创建没有容器的网络。

另外,我是不是错误地接近了这个?

基本上我希望有一个网络可以存在,无论哪个容器加入/离开它。

3 个答案:

答案 0 :(得分:6)

在docker-compose里面检查网络是否被使用,如果它未被使用,它会跳过创建网络:

$ cat docker-compose.net-only.yml
version: '2'

networks:
  test1:
  test2:

$ docker-compose -f docker-compose.net-only.yml --verbose up
.....
WARNING: compose.network.from_services: Some networks were defined but are not used by any service: test1, test2
.....

$ docker network ls | grep test

$

我建议将其作为一个小型shell脚本,调用docker network create而不是尝试使用docker-compose执行此任务。

答案 1 :(得分:1)

docker-compose-networks.yml:

version: '3.7'

services:
    works:
        image: scratch
        restart: always
        container_name: net_works
        deploy:
            placement:
                constraints:
                    - "node.hostname==scratch"
        networks:
            - mynet1
            - mynet2

networks:
    mynet1:
        name: mynet1
        driver: overlay
        attachable: false
    mynet2:
        name: mynet2
        driver: overlay
        attachable: true

答案 2 :(得分:0)

我喜欢使用docker-compose运行的所有docker图像和网络等文件。因此,尽管我的思考过程在docker-compose上,但我只有docker-compose网络文件启动了一个hello-world映像(许多人已经拥有该映像,否则它像2kb),然后立即退出粗略的映像,但保持网络。

version: '3.7'

services: 
    hello_world:
        image: hello-world:latest
        networks: 
            main_net:
                ipv4_address: 172.20.0.255
networks: 
    main_net:
        name: main_network
        ipam:
            config:
                - subnet: 172.20.0.0/16

通过这种方式,我可以规划网络并以最小的开销将其很好地布置在docker-compose文件中。