Docker容器无法联网
这个问题出现在搭建Docker版NextCloud私有云盘的时候.
创建启动容器一切顺利, docker ps -a
看一下, 容器状态upup, 端口映射ok的, 来访问一下看... 嗯? 不通?
接下来就是枯燥的排查过程. 经过反复确认:
- 云服务商安全组: 端口开放了
- firewalld: 杀掉了 (危险操作*1)
- iptables: -F了 (危险操作*2)
- telnet: 本地端口监听正常
- curl: localhost:port 访问正常
内部似乎没有问题, 所以是外部IP的配置问题?
打开谷歌, 搜索到了这个issue, 发现可以创建一个临时容器来查看Docker使用的外部IP:
docker run --rm byrnedo/alpine-curl http://httpbin.org/ip
然而... 这个url访问超时??? 在bash里面 curl http://httpbin.org/ip
确认了一下, 接口是没有问题的.
那么, 有问题的一定是Docker本身了, 它可能压根儿没有连到互联网.
我的搜索关键字变成why my docker has no internet
, 找到了这个stackoverflow问题, 并很顺利地在第二个回答中找到了解决办法, 简单且意想不到------那就是重启Docker服务...
sudo service docker restart
一直以来我都把下面这句话当成玩笑:
重启可以解决90%的问题
对不起, 是我不敬了😂
Version in "./docker-compose.yml" is unsupported.
当我准备好docker-compose配置文件, 准备docker-compose up
的时候, 出现了如下的报错:
Version in "./docker-compose.yml" is unsupported. You might be seeing this error because you're using the wrong Compose file version.
docker-compose说我的配置文件版本不被支持, 而这个配置文件在其他机器上测试过没有问题, 所以应该是docker-compose本身的版本问题.
查了一下, docker-compose 旧版本有bug会导致 version: '3.1'
的配置文件无法被识别. 我机器上安装的是v1.8.0, 配置文件是version: '3'
, 导致识别失败的应该是同一个bug. 这个bug在docker-compose (1.11.1)已经被修复了.
Bugfixes
Fixed a bug where the 3.1 file format was not being recognized as valid by the Compose parser
所以升级到较新(>=1.11.1)的版本, 应该是可以解决这个问题的.
更新步骤:
$ which docker-compose # 查看docker-compose二进制文件位置
/usr/bin/docker-compose
$ sudo rm /usr/bin/docker-compose # 删除旧文件
$ curl -L https://github.com/docker/compose/releases/download/1.20.0/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose # 下载新版
$ chmod +x /usr/bin/docker-compose # 增加执行权限
$ docker-compose --version # 确认新版本
docker-compose version 1.20.0