有些问题参考:

https://www.cnblogs.com/adolfmc/p/12589283.html

Crontab不执行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
yum install -y cronie

# systemctl status crond.service
# 安装rsyslog
yum install -y rsyslog
或者
yum install -y syslog-ng

# 修改/etc/pam.d/cron
# 注释掉 session    required     pam_loginuid.so
# 重启 crontab

systemctl restart crond.service

容器配置如何修改

大家可以用docker inspect ctos83.162命令来查看配置信息。这里的配置信息是可以更改的,比如我们的容器/home/dockerRoot/containers/...目录中有如下的文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
.
├── xxx...xxx-json.log
├── checkpoints
├── config.v2.json
├── hostconfig.json
├── hostname
├── hosts
├── mounts
│   └── shm
├── resolv.conf
└── resolv.conf.hash

#vi config.v2.json 可以修改其中的IP地址
#vi hostname 和 config.v2.json 可以修改主机名

注意

这里要特别提醒,直接修改配置没那么容易,修改的配置在镜像重启之后就又被还原了。有效的办法是先关闭 docker.service服务,再修改配置文件,最后再启动docker.service服务。

SSH登录到容器

如果想从外部远程SSH登录到容器,关键是想办法进入容器时启动 systemd,请用下面命令创建容器:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# centos
docker run -itd --name ctos79.12 --privileged=true dxhj/ctos79 /sbin/init

# opensuse,确保先安装下面的包,然后自制镜像
zypper install -y dbus-1 systemd-sysvinit

# 用上面的自制容器生成镜像,之后用下面的命令启动新的容器
docker run -itd --name=suse153-13-49 -h=suse153-13-49 --network=br0 --ip=10.10.13.49 
--restart=always --privileged --volume /sys/fs/cgroup:/sys/fs/cgroup:ro 
-v /data/data49:/home/bmc 10.10.200.11:5000/suse153.nodejs.14.17 /sbin/init
# 记住这里一定要加上 -v /sys/fs/cgroup:/sys/fs/cgroup:ro 否则opensuse容器重启出异常

opensuse 参考:

https://dhenandi.com/how-to-running-systemd-on-opensuse-docker-container/

systemd容器无法重启

如果遇到启用了 systemd 的容器无法重启,会失败报错误:

Failed to attach 1 to compat systemd cgroup init.scope

可以检查一下/etc/docker/daemon.json 中加入下面的配置:

1
"exec-opts": ["native.cgroupdriver=systemd"],

设置时区和字符集

设置时区参考:

参考:/2021/05/10181354-ntp-time.html

字符集:

1
2
3
# vi /root/.bashrc
alias ll='ls -l'
export LC_CTYPE=en_US.UTF-8

有可能字符集出现下面的问题,可能vi的时候出现乱码:

[root@test /]# locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
C.utf8
POSIX

容器中找不到gunzip

可能会出现下面的错误:Sorry, but I could not find gunzip in path. Aborting.

1
2
3
4
The issue was not gunzip, but [which] was not install.

yum install -y which
yum install -y zip unzip

主机getty进程cpu占用率100%

原因:使用"docker run"运行容器时使用了 /sbin/init 和 –privileged 参数。而且这样的容器可能启动了多个,权限冲突了。

解决方法:Docker中运行下述命令关闭服务,甚至把宿主机的此项服务也关闭。

1
2
3
systemctl status getty@tty1.service
systemctl stop getty@tty1.service
systemctl mask getty@tty1.service

参考:https://www.cnblogs.com/deny/p/10297507.html

也可能会出现Linux内核自带的虚拟化内存管理服务CPU跑满的情况,在大内存的情况下,可以关闭这个服务,不会影响docker的性能。

systemctl status ksmtuned.service
systemctl disable ksmtuned.service
systemctl stop ksmtuned.service

启用Docker的服务器无法进入主机桌面

存在一种情况,如果主机中的Docker容器是自启动的,这样主机重启的时候显示器中将显示主机中第一个Docker容器的控制台登录界面。如何退出此容器的登录界面,进入主机的窗口呢?可以尝试Ctrl+Alt+[F1/F2/F3/F4...],后面的F1,F2,F3,F4代表是不同的系统桌面。

Docker中一些命令无法执行

曾经出现过容器中一些命令无法执行,显示无权限,例如:

ping: error while loading shared libraries: libcap.so.2: cannot stat shared object: Permission denied

这可能是因为宿主机中一些安全机制在作祟,关闭宿主机 apparmor 服务试一试:

systemctl status apparmor.service
systemctl disable apparmor.service
systemctl stop apparmor.service

(未完待续)