Docker实践

Docker使用的实践

实践中遇到的问题

容器时间不对

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 解决方法一
docker cp -L /etc/localtime CONTAINER:/etc/localtime
echo 'Asia/Shanghai' >/etc/timezone

`-L`表示复制实际的内容到`/etc/localtime`, 而不是软连接. 第一步可以保证`shell`的时间正常, 第二步保证其他应用的时间正常.

# 解决方法二
docker [CONTAINER] (create|run) -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro CONTAINER

# 解决办法三
ENV TimeZone=Asia/Shanghai
RUN apt update \
&& apt install -y tzdata
&& cp /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone
&& rm -rf /var/cache/apt && rm -rf /var/lib/apt/lists/*

删除/var/cache/apt是为了删除缓存, 删除/var/lib/apt/lists/*是为了删除仓库的本地索引

解决容器无法输入中文

1
2
3
4
5
6
7
8
9
# 解决方法一
/etc/profile中最后加上, 需要重启
export LANG=C.UTF-08

# 解决方法二
docker [CONTAINER] (create|run) -e LANG=C.UTF-8 CONTAINER

# 解决方法三
ENV LANG="C.UTF-8"

Docker容器无法使用systemctl

1
2
3
4
5
6
# 尽量不要使用systemd, 这个非常不安全, 需要开启特权, centos有init, 但ubuntu没有init, 需要自己通过Dockerfile装
# centos
docker [container] (create|run) -tid --privileged=true CONTAINER:TAG /usr/sbin/init

# ubuntu
docker [container] (create|run) -tid --privileged=true CONTAINER:TAG /sbin/init

尽量使用自己写的脚本去启动.

容器无法退出

CTRL+Q+P可以退出容器, 但不关闭容器. 可以在使用CTRL+D无效的时候使用.

开启SSH

1
2
3
4
5
6
apt install -y openssh-server
mkdir -p /var/run/sshd
修改/etc/ssh/sshd为允许root登录(可以用sed或awk代替)
passwd(echo "username:password" | chpasswd或echo password | passwd --stdin username)
docker [container] commit [-m 描述信息] CONTAINER NAME:TAG
docker [container] -d -p 10022:22 CONTAINER:TAG /usr/sbin/sshd -D

也可以把/usr/sbin/sshd写入到一个脚本中, 在Dockerfile中设置CMD来默认启动.

-------------本文结束感谢您的阅读-------------