基础环境
宿主机操作系统发行版本号如下:
1
2
|
$ cat /etc/openEuler-release
openEuler release 22.03 (LTS-SP1)
|
宿主机操作系统内核版本如下:
1
2
|
$ uname -r
5.10.0-136.17.0.93.oe2203sp1.x86_64
|
docker 版本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
$ docker info
Client:
Context: default
Debug Mode: false
Server:
Containers: 2
Running: 2
Paused: 0
Stopped: 0
Images: 2
Server Version: 20.10.6
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc version: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 5.10.0-136.17.0.93.oe2203sp1.x86_64
Operating System: openEuler 22.03 (LTS-SP1)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.331GiB
Name: proxy-server
ID: YH2T:BTWY:VXVM:CJB7:HYQC:CWJS:6JRT:ESMU:XTPW:N2GC:VDVE:T24C
Docker Root Dir: /data/docker_dir/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
registry.gfstack.geo:5555
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
|
问题
我发现当我使用kernel在5.10以上的容器基础镜像时,容器内dns解析会存在问题,具体的表现为:
但是当我使用centos8的镜像时这个问题会消失
排查过程
我最先想到的是升级runc,发现不奏效。然后索性把dockerd 升级到目前最新的24.0.2
,重启以后问题消失了。当然问题到这肯定没完,我开始用二分法去卡,看看docker具体在哪个版本修复了这个问题,然后通过更新日志去反推可能是什么导致的。
经过漫长的反复尝试,我发现20.10.9 -> 20.10.10 这个过程就消失了,然后我去github查了一下那个版本的更新日志:
Runtime
- Add support for
clone3
syscall in the default seccomp policy to support running containers based on recent versions of Fedora and Ubuntu. moby/moby/#42836.
然后当然就是反复的求证,我发现了这个Red Hat Bugzilla – Bug 2034209 和这个 Privileges not correctly set for buildah · Issue #2168 · containers/buildah · GitHub
简而言之就是高版本seccomp使用clone3的方式进行系统调用,但是docker不支持(容器内调了这种方法就会报错,所有高版本发行版会报错,centos8版本低反而正常),在20.10.10版本docker官方解决了这个问题。