问题标签 [linux-containers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 为什么 ping 数据包无法到达 docker 中的自定义网关?
故事
我有以下虚拟 Docker 网络配置:
使用问题末尾的设置脚本进行构建。这里so_A
,so_AB
和so_B
是 Debian 容器;so_net_a
并且so_net_b
是 Docker 网络(最近添加的功能)。
我想用中间容器做一个路由器so_AB
。为此,我将默认网关替换为so_A
以下 IP so_AB
:
然后我继续运行tcpdump
(so_AB
在一个额外的终端窗口中):
并从 ping 一些地址so_A
。我不明白,为什么当我从一个完全不相关的网络 ping 一个 IP 地址时,例如:
so_AB
接收 ICMP 数据包(尽管出于某种原因来自默认网关192.168.10.1
,而我希望它们来自so_A
ip ),当我从子网192.168.10.2
ping 任何地址时,例如:so_net_b
so_AB
仅接收 ARP 请求,例如ARP, Request who-has 192.168.10.3 tell 192.168.10.2, length 28
.
ip route get
显示so_A
将so_AB
用作两个地址的第一跳。
问题
为什么相关 IP 地址的 ping 数据包无法到达自定义设置的默认网关,而不相关的 IP 地址却可以?
设置
我使用最新的 Docker 版本:1.9.1, build a34a1d5
在我的 64 位 ubuntu 上14.04
。
这是重现该问题的安装脚本:
networking - Linux 命名空间:网络命名空间是否可能存在而不与进程关联?
在 中ip netns
创建对(命名的)网络命名空间的引用/var/run/ns
,可以很容易地对其进行跟踪。同样,也可以通过 确定/proc/[pid]/ns/net
。但是,某些自定义程序可以创建一个 net ns 并将相应的 inode 保存在其他一些非常规的位置。这会使我们难以确定是否有我们可以列出的 net ns。
其次,unshare <cmd>
在进程退出时销毁net ns,这很好。但是,ip netns exec <netns> <cmd>
即使在命令/进程退出后也会保留 ns。所以我相信,任何自定义程序都可以这样做。
因此,问题是:自定义程序是否有可能创建一个未命名的网络 ns,并且它与任何进程无关?
此外,鉴于我们不知道到 inode 的路径,是否可以从用户空间列出这样的(隐藏的)网络 ns?(内核当然有net ns的链表)一段代码会很有帮助。
linux - Docker Linux 映像是否包含内核?
如果是这样,如果我安装一个包含特定版本的 Linux 内核的 Debian 映像,会不会有开销?现在您有了一个带有内核的容器,位于另一个内核(docker 主机的内核)之上。还是我错过了什么?
或者 docker 镜像是否已经将内核剥离了一些?
docker - 用 docker image 打包额外的文件
我有一个 Spring Boot 应用程序(Java),它在正常运行时需要 java 8,我的 python 脚本在目录中,并且该目录必须存在,我将生成的 jar 和 python3.4 保存在系统上
我能够为我的 spring boot 应用程序创建一个 docker 容器,并将 jar 和 scripts/ 目录打包,但我无法打包 python3.4,因此我的应用程序没有作为容器运行。应用程序出现但功能不正确,因为缺少 python。这是我的码头文件。有人可以帮助如何将包 python3.4 也与 java 一起打包
猫 Dockerfile
docker - 使用 docker 迁移系统
我有一个 aws ec2 帐户,我在 nginx 上运行几个 Web 应用程序。我对 docker 了解不多,除了它是一个获取文件系统快照的容器。现在,由于某种原因,我被迫切换帐户。我开设了一个新的 aws ec2 帐户。我可以使用 docker 在我的旧虚拟系统中设置一个容器,然后获取一个映像并部署到我的新系统中吗?通过这种方式,我可以消除必须在新系统中安装许多组件、配置 nginx 和所有应用程序的麻烦。我可以这样做吗?如果是这样,怎么做?
linux - 为什么 docker 不能使用 3.10 之前的内核运行?
Docker 通常不能在 3.10 之前的 Linux 内核上运行。(在某些情况下,它也可以在 3.8 内核中运行)。
旧内核中缺少哪些新内核中的功能会阻止 docker 在其中运行?
linux - Vagga:允许的子用户数量太少
我正在实现这个简单的 vagga 容器示例作为他们教程的一部分。当我尝试运行时,vagga py3
我得到:
错误:vagga::wrapper:执行 _build 时出错:允许的子用户数太小。需要 [Range { start: 0, end: 65536 }],允许 [Range { start: 0, end: 1 }, Range { start: 260000, end: 270000 }]。您需要增加 /etc/subuid 中允许的数字(首选)或减少 vagga.yaml 中所需的范围
我从未接触过甚至听说过 subuids。我不确定为什么这个例子不能开箱即用。我也遇到了类似的 gids 错误。
我已经更新了我的vagga.yaml
:
这实际上有效,但根据错误消息,这不是首选方法。我的用户输入/etc/subuid
是:
我需要做些什么或可以做些什么来确保我的vagga.yaml
作品在包括我在内的大多数系统上开箱即用?
docker - 在 Docker 容器中不能做什么?
我对使用 Docker 在 Puppet 模块上运行测试很感兴趣。
但是,Docker 容器不是一个成熟的操作系统,您不能执行所有任务(正如我在尝试测试交换文件模块时了解到的那样)
是否有完整的清单列出了 Docker 容器中不可能执行的操作,例如管理交换?
networking - 从网络命名空间 Ping 外部 IPv6 地址
我需要从网络命名空间访问外部 IPv6 地址。
在我的主机中,我设置了一个 SIT 隧道(IPv6-in-IPv4),它对 IPv6 数据包进行隧道传输并通过默认接口(eth0)发送它。SIT 隧道依赖于 Hurricane Electric 隧道代理服务。我可以从主机 ping 一个外部 IPv6 地址。
以下是有关隧道的一些详细信息:
有趣的部分来了。由于超出此问题范围的原因,我需要从网络命名空间中执行相同的操作(ping ipv6.google.com)。
以下是我创建和设置网络命名空间的方法:
ns1.sh
然后我ns1.sh
从“ns1”运行并 ping veth1 (fc00::1) vpeer1 (fc00::2)。
但是,如果我尝试 ping 外部 IPv6 地址:
所有数据包都丢失。
我用 tcpdump 打开了 veth1并检查了发生了什么。我看到的是邻居请求数据包正在到达接口。这些数据包正在尝试解析 IPv6 目标地址的 MAC 地址:
我真的不明白为什么会这样。我也在主机中启用了 IPv6 转发,但它没有效果:
感谢您阅读这个问题。欢迎提出建议:)
编辑:
主机中的路由表:
我在主机中添加了一个 NDP 代理,它解决了 NDP 请求。仍然无法从 nsnet 访问该地址(对此进行调查):
linux - Docker 容器无法 ping 出网络端
我正在研究 docker 容器,现在我正在尝试为 docker 容器设置网络。
Docker 基本上使用一个'docker0'
有网络的网桥,172.17.0.0/16
而这个网络不是同一个主机网络。
我希望 docker 容器和主机容器使用相同的网络。所以现在我正在尝试在没有“桥驱动程序”的情况下构建 docker 容器的网络。
我正在192.168.77.0/24
使用共享器使用网络。我希望主机和 docker 容器使用这个网络。
我在这里引用了 - https://docs.docker.com/v1.7/articles/networking/#how-docker-networks-a-container。
以下是我尝试为容器构建网络的命令。所有命令都以 root 用户身份运行。
执行这些命令后,docker 容器可以 ping 到主机,主机可以 ping 到 docker 容器,但容器无法 ping 到外部网络。
下面是执行命令后主机中的路由表。
下面是执行后docker容器中的路由表
但 docker 容器也无法 ping 到网关(192.168.77.1)。
我正在使用 ubuntu 14.04 LTS 桌面版。而且我没有设置任何防火墙。
我设置错了吗?谢谢。