背景:
项目用的docker一直都是安装配置好的,最近研究一些其他东西,安装了KyV10的虚机,发现没有安装也没有配置,于是开始安装并做记录。
操作:
步骤 1:查找仓库里是否有 docker
bash
[root@localhost ~]# yum list | grep docker
docker-runc.x86_64 1.0.0.rc3-222.ky10 @anaconda
containerd.io.x86_64 1.6.32-3.1.el8 docker-ce-stable
docker-anaconda-addon.x86_64 0.4-10.ky10 ks10-SP3x86-os
docker-anaconda-addon.x86_64 0.4-10.ky10 ks10-adv-os
docker-buildx-plugin.x86_64 0.14.0-1.el8 docker-ce-stable
docker-ce.x86_64 3:26.1.3-1.el8 docker-ce-stable
docker-ce-cli.x86_64 1:26.1.3-1.el8 docker-ce-stable
docker-ce-rootless-extras.x86_64 26.1.3-1.el8 docker-ce-stable
docker-compose.noarch 1.22.0-4.ky10 ks10-SP3x86-os
docker-compose.noarch 1.22.0-4.ky10 ks10-adv-os
docker-compose-plugin.x86_64 2.27.0-1.el8 docker-ce-stable
docker-engine.x86_64 1:18.09.0-261.p06.04.ky10 ks10-adv-updates
docker-proxy.x86_64 0.8.0.dev.2-100.p04.ky10 ks10-SP3x86-updates
docker-proxy.x86_64 0.8.0.dev.2-100.p04.ky10 ks10-adv-updates
docker-runc.x86_64 1.0.0.rc3-229.p02.ky10 ks10-SP3x86-updates
docker-runc.x86_64 1.0.0.rc3-229.p02.ky10 ks10-adv-updates
docker-scan-plugin.x86_64 0.23.0-3.el8 docker-ce-stable
pcp-pmda-docker.x86_64 4.1.3-15.p02.ky10 ks10-adv-updates
podman-docker.noarch 1:0.10.1-10.p07.ky10 ks10-SP3x86-updates
podman-docker.noarch 1:0.10.1-10.p07.ky10 ks10-adv-updates
python-docker-tests.noarch 4.0.2-3.ky10 ks10-SP3x86-updates
python-docker-tests.noarch 4.0.2-3.ky10 ks10-adv-updates
python-dockerpty-help.noarch 0.4.1-1.ky10 ks10-SP3x86-os
python-dockerpty-help.noarch 0.4.1-1.ky10 ks10-adv-os
python2-docker-pycreds.noarch 0.4.0-1.1.ky10 ks10-SP3x86-os
python2-docker-pycreds.noarch 0.4.0-1.1.ky10 ks10-adv-os
python2-dockerpty.noarch 0.4.1-1.ky10 ks10-SP3x86-os
python2-dockerpty.noarch 0.4.1-1.ky10 ks10-adv-os
python3-docker.noarch 4.0.2-3.ky10 ks10-SP3x86-updates
python3-docker.noarch 4.0.2-3.ky10 ks10-adv-updates
python3-docker-pycreds.noarch 0.4.0-1.1.ky10 ks10-SP3x86-os
python3-docker-pycreds.noarch 0.4.0-1.1.ky10 ks10-adv-os
python3-dockerpty.noarch 0.4.1-1.ky10 ks10-SP3x86-os
python3-dockerpty.noarch 0.4.1-1.ky10 ks10-adv-os
步骤2:看到了 docker 或者 docker-ce,直接安装:
bash
[root@localhost ~]# yum install -y docker
Last metadata expiration check: 0:01:13 ago on 2026年07月17日 星期五 18时11分53秒.
Dependencies resolved.
===============================================================================================================================================
Package Architecture Version Repository Size
===============================================================================================================================================
Installing:
docker-engine x86_64 1:18.09.0-261.p06.04.ky10 ks10-adv-updates 33 M
Installing dependencies:
containerd x86_64 1.2.0-213.p05.ky10 ks10-adv-updates 15 M
docker-proxy x86_64 0.8.0.dev.2-100.p04.ky10 ks10-SP3x86-updates 757 k
Transaction Summary
===============================================================================================================================================
Install 3 Packages
Total download size: 49 M
Installed size: 203 M
Downloading Packages:
(1/3): docker-proxy-0.8.0.dev.2-100.p04.ky10.x86_64.rpm 29 MB/s | 757 kB 00:00
(2/3): containerd-1.2.0-213.p05.ky10.x86_64.rpm 1.1 MB/s | 15 MB 00:14
(3/3): docker-engine-18.09.0-261.p06.04.ky10.x86_64.rpm 1.5 MB/s | 33 MB 00:21
-----------------------------------------------------------------------------------------------------------------------------------------------
Total 2.3 MB/s | 49 MB 00:21
Kylin Linux Advanced Server 10 - Updates 1.7 MB/s | 1.7 kB 00:00
Importing GPG key 0x7A486D9F:
Userid : "NeoKylin (release key) <support@cs2c.com.cn>"
Fingerprint: B814 9E68 5286 4585 CE41 143B 41F8 AEBE 7A48 6D9F
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-kylin
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : containerd-1.2.0-213.p05.ky10.x86_64 1/3
Installing : docker-proxy-0.8.0.dev.2-100.p04.ky10.x86_64 2/3
Installing : docker-engine-1:18.09.0-261.p06.04.ky10.x86_64 3/3
Running scriptlet: docker-engine-1:18.09.0-261.p06.04.ky10.x86_64 3/3
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
Verifying : docker-proxy-0.8.0.dev.2-100.p04.ky10.x86_64 1/3
Verifying : containerd-1.2.0-213.p05.ky10.x86_64 2/3
Verifying : docker-engine-1:18.09.0-261.p06.04.ky10.x86_64 3/3
Installed:
containerd-1.2.0-213.p05.ky10.x86_64 docker-engine-1:18.09.0-261.p06.04.ky10.x86_64 docker-proxy-0.8.0.dev.2-100.p04.ky10.x86_64
Complete!
步骤3:安装完成后启动:
bash
systemctl start docker
systemctl enable docker
步骤4:配置一下镜像加速
安装成功后,必须配置一下镜像加速,否则在麒麟/国内环境下拉取镜像会非常慢或失败。
创建配置目录,写入镜像加速配置
bash
[root@localhost ~]# mkdir -p /etc/docker
[root@localhost ~]# cat > /etc/docker/daemon.json <<EOF
> {
> "registry-mirrors": [
> "https://docker.mirrors.ustc.edu.cn",
> "https://hub-mirror.c.163.com"
> ],
> "exec-opts": ["native.cgroupdriver=systemd"]
> }
> EOF
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable docker
(注意:增加了 "native.cgroupdriver=systemd",这对麒麟系统的 systemd 兼容性很重要)
步骤5:验证
bash
[root@localhost ~]# docker version
Client:
Version: 18.09.0
EulerVersion: 18.09.0.261
API version: 1.39
Go version: go1.15.7
Git commit:
Built: Wed Jul 23 09:32:23 2025
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.09.0
EulerVersion: 18.09.0.261
API version: 1.39 (minimum version 1.12)
Go version: go1.15.7
Git commit: bae0837
Built: Wed Jul 23 09:30:59 2025
OS/Arch: linux/amd64
Experimental: false
问题
问题1:时钟问题
bash
[root@localhost ~]# date
2026年 07月 17日 星期五 18:15:57 CST
今天是:2026年 08月 17日 星期一
手动同步一次:
bash
[root@localhost ~]# systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2026-07-17 23:10:19 CST; 1 months 0 days ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Main PID: 791 (chronyd)
Tasks: 1
Memory: 328.0K
CGroup: /system.slice/chronyd.service
└─791 /usr/sbin/chronyd
7月 17 16:19:27 localhost.localdomain chronyd[791]: Can't synchronise: no selectable sources
7月 17 16:29:09 localhost.localdomain chronyd[791]: Selected source 8.149.241.96
7月 17 16:29:09 localhost.localdomain chronyd[791]: System clock wrong by 343382.003722 seconds, adjustment started
7月 17 16:33:39 localhost.localdomain chronyd[791]: Source 113.141.164.38 replaced with 1.82.219.234
7月 17 17:48:53 localhost.localdomain chronyd[791]: Source 1.82.219.234 replaced with 113.141.164.38
7月 17 18:05:04 localhost.localdomain chronyd[791]: Can't synchronise: no selectable sources
7月 17 18:11:31 localhost.localdomain chronyd[791]: Selected source 8.149.241.96
7月 17 18:11:31 localhost.localdomain chronyd[791]: System clock wrong by 2320561.278474 seconds, adjustment started
8月 17 14:09:12 localhost.localdomain chronyd[791]: System clock was stepped by 2663452.782492 seconds
8月 17 14:11:02 localhost.localdomain chronyd[791]: Source 113.141.164.38 replaced with 1.82.219.234
[root@localhost ~]# chronyc makestep
200 OK
[root@localhost ~]# date
2026年 08月 17日 星期一 14:34:58 CST
问题2:防火墙冲突问题
bash
[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2026-07-17 18:13:39 CST; 1min 58s ago
Docs: https://docs.docker.com
Main PID: 238044 (dockerd)
Tasks: 20
Memory: 95.4M
CGroup: /system.slice/docker.service
├─238044 /usr/bin/dockerd --live-restore
└─238051 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
[root@localhost ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2026-07-17 23:10:21 CST; 1 months 0 days ago
Docs: man:firewalld(1)
Main PID: 947 (firewalld)
Tasks: 2
Memory: 29.6M
CGroup: /system.slice/firewalld.service
└─947 /usr/bin/python3 /usr/sbin/firewalld --nofork --nopid
7月 17 18:13:39 localhost.localdomain firewalld[947]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DR>
8月 17 14:09:33 localhost.localdomain firewalld[947]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D OUTPUT -m addrtype --dst-typ>
8月 17 14:09:33 localhost.localdomain firewalld[947]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D PREROUTING' failed: iptables>
8月 17 14:09:33 localhost.localdomain firewalld[947]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D OUTPUT' failed: iptables: Ba>
8月 17 14:09:33 localhost.localdomain firewalld[947]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER' failed: iptables:>
8月 17 14:09:33 localhost.localdomain firewalld[947]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER-ISOLATION-STAGE-1'>
8月 17 14:09:33 localhost.localdomain firewalld[947]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -F DOCKER-ISOLATION' failed:>
8月 17 14:09:33 localhost.localdomain firewalld[947]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER-ISOLATION' failed:>
8月 17 14:09:33 localhost.localdomain firewalld[947]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DR>
8月 17 14:09:33 localhost.localdomain firewalld[947]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DR>
简单来说:显示的状态没什么大问题,但日志里的报错很烦人,且可能会影响 Docker 容器的网络访问。
1. 关键错误分析(日志里的 WARNING)
你看到的这一大堆 WARNING: COMMAND_FAILED: ... iptables ... 是** Docker 和 防火墙 的经典冲突**。
- 原因 :
- Docker 启动时,会直接修改底层的
iptables规则来开放端口。 - Firewalld(防火墙服务)启动或重载时,也会去修改
iptables规则。 - 两者互不相让,Firewalld 想删除 Docker 设置的规则,或者发现规则被占用了,就会报这些错。
- Docker 启动时,会直接修改底层的
- 后果 :
- 最常见:仅仅产生日志垃圾,不影响运行。
- 最严重 :导致你虽然映射了端口(比如
-p 5003:5003),但外部浏览器访问不通。
2. 状态信息解读
Active: active (running):防火墙是开启的。这意味着你需要手动开放端口,否则外部无法访问 Docker 容器。since Fri 2026-07-17 ...:这里又出现了 2026年。再次提醒你,你的系统时间还没改过来!这可能导致日志时间混乱,甚至可能影响证书验证(虽然防火墙本身不依赖证书,但这是个隐患)。
✅ 解决方案
既然你在银河麒麟 V10 上(通常是服务器环境),建议采用最稳妥的方案:让 Docker 乖乖听话,或者直接开放端口。
方法一:配置 Docker 不操作 iptables(推荐,最省心)
这种方法让 Docker 不去触碰底层防火墙规则,避免冲突,然后由你来决定开放哪些端口。
1. 修改 Docker 配置文件
bash
vi /etc/docker/daemon.json
2. 添加 "iptables": false
修改后的内容如下(保留你之前的镜像加速配置):
bash
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn" ,
"https://hub-mirror.c.163.com"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"iptables": false
}
3. 重启 Docker
bash
systemctl daemon-reload
systemctl restart docker

4. 在防火墙中开放端口(必须做!)
因为 Docker 现在不管防火墙了,你需要手动打开你的应用端口(比如 5003):
bash
[root@localhost ~]# firewall-cmd --zone=public --add-port=5003/tcp --permanent
success
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.16.0/24" port port="22" protocol="tcp" accept'
success
[root@localhost ~]# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.16.0/24" port port="5003" protocol="tcp" accept'
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-rich-rules
rule family="ipv4" source address="192.168.16.0/24" port port="22" protocol="tcp" accept
rule family="ipv4" source address="192.168.16.0/24" port port="5003" protocol="tcp" accept
解释:
--permanent: 表示永久生效,重启后依然有效。family="ipv4": 针对 IPv4 协议。source address="192.168.16.0/24": 只允许源 IP 在 192.168.16.1 到 192.168.16.254 之间的连接。port port="..." accept: 允许访问该端口。
验证:
bash
[root@localhost ~]# docker pull hello-world
Using default tag: latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 199.16.156.39:443: connect: connection refused
出现无法访问问题。
配置国内镜像加速器,国内镜像加速器也可能帮你拉取到镜像,因为它们缓存了大量镜像
1. 修改 Docker 配置文件,写入以下内容(添加 registry-mirrors)
bash
[root@localhost ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://docker.chenby.cn",
"https://docker.awsl9527.cn"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"iptables": false
}
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
4f55086f7dd0: Pull complete
Digest: sha256:5dd0d3e6e255913fc30f90b9f2b1d359cc2cbdb48090cc4b65f1676e203243cc
Status: Downloaded newer image for hello-world:latest
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ghcr.io/fiyo/dbcheck 26.8.17.0 dbde60e9b691 2 hours ago 881MB
hello-world latest e2ac70e7319a 4 months ago 10.1kB