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

1cklez4t  于 2022-10-23  发布在  Docker
关注(0)|答案(5)|浏览(261)

过去几天我一直在玩Docker-Compose,看看它是否会简化我的Docker Container和Network构建过程。
我对它很满意,但是当我想创建一些没有被任何服务使用的‘网络’时,我遇到了一个问题。
我想要此行为的原因是有一个Docker-Compose文件来创建我的本地结构,即‘私有’网络和‘公共’网络。和一个单独的Docker--为我的每个利用已经创建的‘外部’网络的项目撰写文章。
我注意到我只能指定一个虚拟容器来初始化网络的创建,但这似乎是不必要的。例如..

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创建不带容器的网络。
另外,我是不是不正确地处理了这个问题?

本质上,我希望有一个网络,无论什么容器加入/离开它,它都能生存。

yuvru6vn

yuvru6vn1#

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

$

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

wgx48brx

wgx48brx2#

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
wydwbb8l

wydwbb8l3#

我所有的码头图片和网络等等。我喜欢用docker-compose运行的文件。所以,当我的思维过程是在docker-compose上时,我只有docker-composed网络文件,这些文件旋转出一个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文件中。

cyvaqqii

cyvaqqii4#

实际上,您只需要设置一个在您的网桥子网范围内的“IPV4_ADDRESS”,就像@Alfa Bravo所说的。
比如

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

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可以成功添加您自己的网桥。

ssm49v7z

ssm49v7z5#

很难看,但对我很管用。

version: "2.1"

services:                                                                                                                                     
  network-only:                                                                                                                               
    image: tianon/true                                                                                                                        
    container_name: network-only                                                                                                              
    networks:                                                                                                                                 
      - internalbr                                                                                                                            

networks:                                                                                                                                     
  internalbr:                                                                                                                                 
    name: my-network

相关问题