Docker 的安装、连接网络以及从容器内访问 ipv6 的方法
最近在写一个测试 ss 的程序的时候踩了不少坑,
首先呢是 Python 在用 supervisor 运行的时候,异常的信息不会被记到日志里去。虽然说正常我们运行 Python 的时候能在标准输出里观察到异常,但是就是不会被记到日志里去。然后异常了以后程序也不会自己退出,而是一直在那挂起着,所以也不会被重启。于是就给人一种程序莫名地停止工作的错觉。要让 Python 输出异常
python3 -u /path/to/yourprogram.py
就可以了。
好了现在来说 docker 的问题。此前我被阿里云坑了 docker 怎么都连不上网 = = 表现是能 ping,但是不能 curl。不知道谁把我的 tcp 包给吃掉了 – – 此前一直以为是系统的问题,在 vultr 上装了 Archlinux。今天偶然察觉到可能是服务商的锅,于是在 vultr 上又装回了 debian,结果联网没什么问题,神清气爽。也就是说这个奇怪的没什么人问的问题不是系统的问题,以后遇到这种事先怀疑一下服务商
首先是安装。Debian 自带的源里的 docker 是很旧很旧的,&不要去网上随便搜那种一件安装脚本然后就用,那也是不一定靠谱的。安装的文档在这里 https://docs.docker.com/engine/installation/linux/docker-ce/debian/#install-using-the-repository 按照文档添加源几步就能装好。
装好以后网络就是可以用的。如果搜索 ipv6 的话大部分的都是如何让容器获得一个 ipv6 地址来对外提供服务。而如果要从容器内访问公网 ipv6 的话,最简单的方法其实是 NAT。这里有一个非常好的小白的教程
结合这篇 ipv6 的文档食用效果更佳 https://docs.docker.com/engine/userguide/networking/default_network/ipv6/#how-ipv6-works-on-docker
其中文章中省略的 如何“modified the systemd service file of docker and added a fixed IPv6 CIDR”的问题,可以参考这篇文档 https://docs.docker.com/engine/reference/commandline/dockerd//,按照文档,文章中所要做的可以通过新建一个文件 /etc/docker/daemon.json
{
"fixed-cidr-v6": "fd00::/64",
"ipv6": true
}
这样就可以让 docker 在用 systemd 启动的时候带上 ipv6 的功能啦。