docker镜像alpine无法联网

alpine docker镜像无法联网出现如下错误:

ERROR: https://mirrors.ustc.edu.cn/alpine/v3.15/main: temporary error (try again later) WARNING: Ignoring https://mirrors.ustc.edu.cn/alpine/v3.15/main: No such file or directory 3069277072:error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:1914:

基础的 docker 镜像是~ ~python:3.6-alpine~ ~

stack overflow上看到一个解答

docker can't build because of alpine error - Stack Overflow

  1. 使用~ ~docker build . --network local 进行构建--错误仍在
  2. 添加~ ~8.8.8.8~ ~到文件 /etc/resolv.conf 并重启docker--错误仍在

思路:启动一个基础docker 容器,并进入查找错误原因

  1. 启动并进入容器
    docker run -it python:3.6-alpine /bin/sh 
  2. 执行Dockerfile文件里的命令
    apk安装及更新时出错
    使用~ ~ping~ ~命令测试网络连通性,出错~ ~ping: clock_gettime(MONOTONIC) failed~ ~
    使用~ ~nc~ ~命令连接外部服务器,可以连接ip,不能连接域名
    猜想应该是域名解析的问题

对alpine不熟,换一个其他的基础容器

使用镜像~ ~python:3.6~ ~,启动镜像后使用pip时报错

Fatal Python error: Py_Initialize: can't initialize time
PermissionError: [Errno 1] Operation not permitted

Current thread 0xb6fda010 (most recent call first):
Aborted (core dumped)
# pip
Fatal Python error: Py_Initialize: can't initialize time
PermissionError: [Errno 1] Operation not permitted

Current thread 0xb6f12010 (most recent call first):
Aborted (core dumped)

比较了一下两个python镜像的大小

python                   3.6                 a3bba401d788        2 weeks ago         696MB
python                   3.6-alpine          dc8c4f7b64b7        2 weeks ago         34.8MB

还是用~ ~alpine~ ~版本的吧

域名解析问题

搜到这里,说要将~ ~/etc/resolv.conf~ ~文件中的~ ~ndots~ ~注释掉

进入容器查看~ ~/etc/resolv.conf~ ~文件,并没有字符~ ~ndots~ ~

搜索ping的错误~ ~ping: clock_gettime(MONOTONIC) failed~ ~

找到了这里,有三种解决方法

  1. 安装一个软件包
    wget http://ftp.us.debian.org/debian/pool/main/libs/libseccomp/libseccomp2_2.4.4-1~bpo10+1_armhf.deb && sudo dpkg -i libseccomp2_2.4.4-1~bpo10+1_armhf.deb
    下载时发现2.4.4版本已经没了,于是下载2.5.1版本
    安装后仍然时间还不对,安装前是1970年,安装后变成了2071年
  2. 第二个方法一样,不过是添加源安装软件
  3. 方法三要更新树莓派的系统

方法2和方法3需要添加源或更新系统,不想搞太多源,也懒得重新安装

又搜了一下,看到这里,有人提示添加~ ~--security-opt seccomp=unconfined~ ~

测试一下

❯ docker run -it --rm --security-opt seccomp=unconfined python:3.6-alpine ping baidu.com
PING baidu.com (220.181.38.148): 56 data bytes
64 bytes from 220.181.38.148: seq=0 ttl=48 time=45.827 ms
64 bytes from 220.181.38.148: seq=1 ttl=48 time=47.090 ms

网络可以ping通了,应该可行

但是使用~ ~docker build~ ~时,出现了问题

❯ docker build . --security-opt seccomp=unconfined
Error response from daemon: The daemon on this platform does not support setting security options on build

系统无法使用此选项

从其它系统构建镜像后导出

docker 镜像保存:

~ ~docker save 0d33 > proxy_pool.tar~ ~

docker镜像导入:

~ ~docker load < proxy_pool.tar~ ~

两个机器架构不同

按照这里进行跨平台构建即可