0%

在Centos8中,默认安装的的容器管理工具是使用了Podman,Podman的设计理念非常好,整合了pod思想,用户可以直接启动容器而不是像Docker那样通过守护进程启动,这样也会提高安全性。但是现在Podman国内使用的人数并不是很多,还会有一些问题出现。所以在Centos8上先将Podman替换为Docker。在Centos8下安装Docker会有container.io的依赖问题,现在来解决一下。

但是要注意的是,在Centos8中使用Docker启动容器的话,容器内默认的网络是不通的,需要简单的配置。在这一篇文章中Centos8安装Docker后容器内无法访问网络提供了解决办法。

简要概括

思路是卸载podman,安装docker-ce的repo源,解决依赖,安装完成,启动服务就是这样了。

卸载podman

dnf remove -y podman

安装docker-ce官方源

首先我们添加docker-ce官方的源,这样才能用到最新版本的Docker。

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

之后更新一下列表和依赖

dnf update -y

如果在update过程中提示添加GPG密钥,yes通过即可。稍稍等待一会吧。

解决依赖问题

如果安装完官方源后,直接安装docker-cecontainerd.io这个包会出现版本依赖的问题,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@DELL ~]dnf install docker-ce docker-ce-cli
Last metadata expiration check: 0:09:11 ago on Sat 21 Mar 2020 04:17:47 PM CST.
Error:
Problem: package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
- package containerd.io-1.2.13-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.el7.x86_64 is excluded
- package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

解决方案有两个,要么安装老版本的docker-ce,要么升级container.io。我肯定选择第二个,问题形成的原因也很简单,官方的repo源里面的container.io版本比较老。我们去下载一个符合版本要求的container.io包。

dnf install -y https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

一条毒奶粉(dnf)命令直接安装目前最新的container.io 包。哦对了,该包来源于Docker官方,下载的是x86_64架构的包。如果你是其他平台,请到这儿里自己来选吧。

安装docker-ce

container.io的依赖问题已经解决完了,接下来直接安装就好了!

dnf install -y docker-ce docker-ce-cli

开启服务

systemctl enable --now docker

成功安装后开启docker守护进程,尝试一下启动一个容器。没有问题的话就是安装成功了。但是要注意的是,如果你发现在容器内部无法访问网络,那么你可以尝试一下用firewalld开启你的IP地址转发功能,具体操作和解决方案在这里Centos8安装Docker后容器内无法访问网络


我是一名Linux初学者,如果你与我一样喜欢折腾,喜欢Linux,那么请加入我的电报群https://t.me/yeefire_blog,在这里畅所欲言,共同学习进步。

在Centos8中,默认安装的的容器管理工具是使用了Podman,Podman的设计理念非常好,整合了pod思想,用户可以直接启动容器而不是像Docker那样通过守护进程启动,这样也会提高安全性。但是现在Podman国内使用的人数并不是很多,还会有一些问题出现。所以在Centos8上先将Podman替换为Docker。

在安装好Docker后,结果没有网络,经过排查发现是没有开启ip转发。正常情况下,Docker会自动开启地址转发。但是,不知道为什么Docker在Centos8中没有开启iptables的地址转发,需要我们使用firewalld防火墙管理工具来手动开启IP地址转发功能。

阅读全文 »

Docker或Podman容器内无法解析DNS问题多种解决方案

新安装了Centos8使用Podman,但是在容器内怎样都无法解析域名DNS。尝试了网上大多数的解决办法依然无效。在当我一筹莫展之时我想到了奥利给叔告诉过我“遇到什么困难,都不要怕!微笑的面对他”!

最终还是想到了是不是firewalld没有开启IP地址伪装(IP转发)功能。三下五除二赶紧执行firewall-cmd --query-masquerade。果然没有开启,开启后解决问题,瞬间晴朗。

下面是我和网络上其他人对于Docker容器内无法解析DNS地址的问题总结。

阅读全文 »

使用 NetworkManager 来管理树莓派 Ubuntu 系统网络 以及个人的体验优化

由于Raspbian官方网站上目前只提供arm32的系统。手里的这块树莓派4 4G发挥不出来它的最大性能,想想就难受。看到了有Ubuntu Server for Raspberry 3/4 的64位版本就心血来潮准备刷入。

烧录好镜像后,插卡!der~开机。使用默认的用户名和密码:ubuntu顺利进入系统。虽然没有显示器,插上网线!原来的时候在路由器里分配好的静态IP由于Mac地址没变,自然还是那个老IP咯。但是发现没有NetworkManager,感觉不太方便啊!虽然原来的Raspbian也没有,当时想想就算了哈!这回装了新系统,干脆弄的舒服点。

阅读全文 »

存储挂载的概念

将驻留在物理磁盘或虚拟镜像上的文件系统添加到现有目录树的过程称为挂载。其中挂载到系统的目录称为挂载点

存储设备由一个特殊文件类型表示,称为块设备。块设备存储在/dev目录下。在RHEL系操作系统中,检测到的第一个SCSI、SATA或USB存储设备叫sda,块设备在/dev/sda,第二个是sdb以此类推。该名称代表整个存储设备。若要挂载某一分区,那么在/dev/sda上的第一个分区叫sda1、第二个分区叫sda2以此类推。

虚拟机中的磁盘驱动器是例外情况,通常显示为/dev/vd(x)/dev/xvd(x)

阅读全文 »

使用防火墙可以对外部的数据包进行过滤和阻止,尽可能减少暴露在网络上的危险以保护系统安全。在RHEL7系的Linux系统中,已经将iptables防火墙管理工具使用firewalld代替。这篇文章的所有案例在RHEL8上成功执行,如果遇到了问题请尝试变通或者在底部评论区与我留言。噗!这是我第一次做标题党哈哈哈。

更新日期:2020年3月4日(富规则配置举例、增加富规则中的icmp-type过滤规则、优化了一些细节错误)。常见用法已经全部写在文章中,之后会不定期更新细节。

阅读全文 »

使用locatefind即可实现在挂载的文件系统中搜索文件。

locatefind介绍

locate命令

locate命令是搜索预先生成的数据库中的文件名或文件路径,这份数据库正常是由cron计划任务每天自动更新,数据库默认位置在:

Ubuntu /var/cache/locate/locatedb

RHEL/var/lib/mlocate/mlocate.db

如果没有该数据库那么需要手动生成,使用管理员用户执行命令updatedb即可自动生成。

阅读全文 »

systemd简介

Linux系统和服务进程由systemd系统和服务管理器进行管理,它提供了一种方式可以在启动时和运行中的系统上激活系统资源、Web守护进程和其他进程。

一般情况下,守护进程在系统启动时自动开启并持续维护服务运行,直到服务器关机或手动停止。通常来说,守护进程的进程名以d命名结尾。

阅读全文 »

SSH 是什么

SSHOpenSSH Secure Shell通用的简称,OpenSSH Secure Shell(SSH)是用来在远程设备的操作系统上安全运行Shell,只需要提供远程目的设备系统的用户信息并且完成身份认证就可以对登录到该系统执行命令了。

阅读全文 »

1、Linux是什么操作系统?

Linux操作系统也可以叫做“Linux发行版”。通常来讲,一个Linux发行版包括Linux内核,以及将Linux发行版系统安装到本机的安装程序,还有每个发行版具有特色的专有软件。各个发行版都有其不同的特色,有些发行版对不同电脑硬件结构进行优化和支持,有些发行版对普通用户或开发者使用方式的调整,也有对针对实时应用或嵌入式系统的开发等等。当前,超过三百个发行版被积极的开发,最普遍被使用的发行版有大约十二个。较为知名的有Debian、Ubuntu、Fedora和openSUSE等。

阅读全文 »