过去几天我一直在玩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创建没有容器的网络。
另外,我是不是错误地接近了这个?
基本上我希望有一个网络可以存在,无论哪个容器加入/离开它。
答案 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文件中。