docker - 如何在 docker-compose 中配置网络?
问题描述
在主机中,我使用以下命令创建了 docker 网络:
docker network create -d macvlan \
--subnet=192.168.2.0/24 \
--gateway=192.168.2.1 \
-o parent=eth0 pub_net
码头工人网络显示如下:
[root@192-168-2-70 shell]# docker network ls
NETWORK ID NAME DRIVER SCOPE
935ae8b52eb2 bridge bridge local
81577f72f606 host host local
846d54a2c7da none null local
158428b19c4d pub_net macvlan local
[root@192-168-2-70 shell]#
指定 IP 的 docker 容器可以通过以下命令启动:
docker run --net=pub_net --ip=192.168.2.10 --name hadoop0 --hostname hadoop0 -d -P hadoop-cluster-hadoop0:v1.1
但是当我将上述命令转换为 docker-compose 文件时,如下所示:
version: '3'
services:
hadoop-cluster-hadoop0:
container_name: hadoop0
restart: always
networks:
pub_net:
ipv4_address: 192.168.2.10
volumes:
- /tmp/hadoop0/logs:/tmp
extra_hosts:
- "hadoop0:192.168.1.10"
- "hadoop1:192.168.1.11"
- "hadoop2:192.168.1.12"
- "dbus-n1:192.168.2.81"
image: 'hadoop-cluster-hadoop0:v1.1'
networks:
put_net:
external: true
发生以下错误。
[root@192-168-2-70 shell]# docker-compose up -d
WARNING: Some networks were defined but are not used by any service: put_net
ERROR: Service "hadoop-cluster-hadoop0" uses an undefined network "pub_net"
[root@192-168-2-70 shell]#
有人可以帮我解决如何更正 docker-compose 文件吗?如何在 docker-compose 文件中创建 docker 网络,而不是预先创建?
非常感谢您的帮助!!!
解决方案
仔细观察,您命名了您的网络put_net
,但pub_net
在您的服务定义中引用了它。
此外,当您定义网络时,external
这意味着它应该已经创建。如果您希望 docker-compose 为您执行此操作,则可以改为执行此操作。
networks:
put_net:
driver: bridge
ipam:
driver: default
config:
-
subnet: 192.168.2.0/24
如果您想完全重新创建您在问题中指定的网络,那么您必须将版本从“3”降级为“2”;这是因为在版本“3”中删除了一些功能,其中一个选项是指定的能力gateway
(至少据我所知)。
这是您的 docker-compose 文件的外观。(注意版本从“3”到“2”的变化)
version: '2'
services:
hadoop-cluster-hadoop0:
container_name: hadoop0
restart: always
networks:
put_net:
ipv4_address: 192.168.2.10
volumes:
- /tmp/hadoop0/logs:/tmp
extra_hosts:
- "hadoop0:192.168.1.10"
- "hadoop1:192.168.1.11"
- "hadoop2:192.168.1.12"
- "dbus-n1:192.168.2.81"
image: 'hadoop-cluster-hadoop0:v1.1'
networks:
put_net:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
-
subnet: 192.168.2.0/24
gateway: 192.168.2.1
推荐阅读
- typescript - 找不到模块“...”或其相应的类型声明。(NextJS + TypeScript)
- php - geoNames api 返回 SyntaxError:JSON.parse:JSON 数据的第 1 行第 1 列的意外字符
- swagger - Swagger,从和到日期字段的条件
- php - Laravel:奇怪的意外'endif'
- javascript - 将 JavaScript 重写为 React 不接受 jQuery
- html - 如何在一个居中的背景上使用多个 SVG
- visual-studio - 如何在源代码管理资源管理器中可靠地获取最新的大量文件
- javascript - JS:将列表转换为具有多个列表的列表,这些列表在某些索引之间具有所有对象
- python - Python分段上传不采用内容类型
- user-interface - 智能家居应用