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
来默认启动.