当前位置: 首页 > 面试题库 >

如何使用docker-compose分配IPv6地址

壤驷英叡
2023-03-14
问题内容

我在Ubuntu 16.04和docker-compose 1.8.1上使用docker
1.12.1。我正在尝试从https://docs.docker.com/compose/compose-file/#ipv4-address-
ipv6-address
获取Compose文件以运行。作为参考,我创建docker-compose.yml了以下内容:

version: '2'

services:
  app:
    image: busybox
    command: ifconfig
    networks:
      app_net:
        ipv4_address: 172.16.238.10
        ipv6_address: 2001:3984:3989::10

networks:
  app_net:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "true"
    ipam:
      driver: default
      config:
      - subnet: 172.16.238.0/24
        gateway: 172.16.238.1
      - subnet: 2001:3984:3989::/64
        gateway: 2001:3984:3989::1

现在,运行docker-compose up产生

Creating network "tmp_app_net" with driver "bridge"
Creating tmp_app_1
Attaching to tmp_app_1
app_1  | eth0      Link encap:Ethernet  HWaddr 02:42:AC:10:EE:0A  
app_1  |           inet addr:172.16.238.10  Bcast:0.0.0.0  Mask:255.255.255.0
app_1  |           inet6 addr: fe80::42:acff:fe10:ee0a/64 Scope:Link
app_1  |           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
app_1  |           RX packets:4 errors:0 dropped:0 overruns:0 frame:0
app_1  |           TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
app_1  |           collisions:0 txqueuelen:0 
app_1  |           RX bytes:520 (520.0 B)  TX bytes:90 (90.0 B)
app_1  | 
app_1  | lo        Link encap:Local Loopback  
app_1  |           inet addr:127.0.0.1  Mask:255.0.0.0
app_1  |           inet6 addr: ::1/128 Scope:Host
app_1  |           UP LOOPBACK RUNNING  MTU:65536  Metric:1
app_1  |           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
app_1  |           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
app_1  |           collisions:0 txqueuelen:1 
app_1  |           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
app_1  | 
tmp_app_1 exited with code 0

未分配IPv6地址。

我已经尝试过:

  1. 使用以下命令启动Docker守护程序 --ipv6
  2. 使用以下命令启动Docker守护程序 --ipv6 --fixed-cidr-v6="2001:3984:3989::/64"
    • 请注意,docker run -it busybox ifconfig实际上是在这里给我一个IPv6地址(来自--fixed-cidr分配给默认bridge网络的子网)
  3. 使用我的实际IPv6子网而不是代码示例中的子网,并对该子网重复2。

没有成功 有任何想法吗?


问题答案:

事实证明,这确实是一个docker-compose
错误,该错误将在1.9.0中修复。

同时,有一种解决方法,可以使用以下docker network命令创建自定义网络:

docker network create --subnet=172.16.2.0/24 --gateway=172.16.2.1 --ipv6 --subnet=<myV6Network/subnet> dockerbridge

…然后可以docker-composed.yml通过编写使其在内部可用

networks:
  dockerbridge:
    external:
      name: dockerbridge


 类似资料:
  • 问题内容: 我想通过docker-compose建立映像并为其设置特定标签。文档说: Compose将使用生成的名称来构建并标记它,然后使用该图像。 但是我找不到指定标签的方法,对于生成的图像,我总是看到“最新”标签。 问题答案: 似乎文档/工具已更新,您现在可以将标记添加到脚本中。这对我来说是成功的。 例: https://docs.docker.com/compose/compose- fil

  • 我想通过docker compose构建图像,并为其设置特定标记。文件说: Comment将构建并用生成的名称标记它,然后使用该映像。 但是我找不到指定标签的方法,对于构建的图像,我总是看到“最新”标签。

  • 问题内容: 当我启动新容器时,Docker会自动为它们分配一些MAC地址。我很好奇这项作业是否有模式。MAC地址可以更改吗? $泊坞窗网络检查网桥 问题答案: Docker开始为第一个容器分配始终相同的mac ,然后为每个不同的容器将每个mac增加一个。 不知道为什么他们要使用该mac地址。看来与oui数据库中的任何实际供应商都不匹配。查看有关此内容的官方文档。他们说: MAC地址是使用分配给容器

  • 所以有几个网站会为你计算你的链接本地ipv6地址,就像这里的这个。 尽管如此,它并没有给出任何有用的关于这个地址是如何计算的,也没有输入参数是什么。那么,如果一个人知道自己的ipv4地址、子网掩码和网关地址,计算链路本地ipv6地址的过程(或算法)是什么?我正在使用SCTP套接字做一个项目,该项目使用ISATAP网络隧道和LL ipv6地址用于构建ISATAP地址。

  • 但是,我需要它从我们的nexus服务中提取:。在docker-compose文件中,我已经使用了正确的nexus图像路径。(通过用docker-compose手动启动它来验证。然而,TestContainers也会拉入docker-compose文件之外的其他图像。正是这些图像导致了失败。 我很高兴Docker Desktop或TestContainers的配置更改能解决这个问题。 注意:我已经尝

  • 问题内容: 我正在使用docker-compose构建完整的开发堆栈。 该应用程序需要一个mysql服务器才能工作。 mysql服务器是由docker-compose设置的外部容器: 该应用程序具有自己的docker-compose.yml并引用了mysql容器: 我无法在docker-compose中传递它们,因为它是动态的。 我知道应用程序知道mysql IP地址,因为我设置了某些变量: 但这