1. Docker容器和宿主机时间同步问题

  • 原因:宿主机时区和Docker容器的不一致,导致两者相差8小时
  • 解决方法一:
    启动容器的时候指定启动参数,自动挂载localtime文件到容器内
1
docker run --name <name> -v /etc/localtime:/etc/localtime:ro  ....
  • 解决方法二:
    把时区设置加入到Dockerfile中
1
2
3
4
# CentOS
RUN echo "Asia/shanghai" > /etc/timezone;
# Ubuntu
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • 特殊镜像的时区,如alpine 在解决方法一或二中加入一下命令
1
apk add -U tzdata

7. volume权限问题

  • 执行命令的时候加入-u [当前linux用户名]
1
docke -run -u root ....

8. docker容器无法通过IP访问宿主机:No route to host

centos 7

  • 查询docker0网卡ip
1
2
3
4
5
6
7
8
ip addr |grep docker0

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
32: veth3adebab@if31: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
48: veth7c11510@if47: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
353: vethc143d81@if352: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
423: veth5b7bcdf@if422: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
`inet 172.17.0.1/16`就是docker的ip范围
  • /etc/firewalld/zones/public.xml添加以下内容:
1
2
3
4
<rule family="ipv4">
<source address="172.17.0.0/16" />
<accept />
</rule>
例如:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<rule family="ipv4">
<source address="172.17.0.0/16" />
<accept />
</rule>
</zone>
  • 重启防火墙
1
systemctl restart firewalld

9. alpine类型容器使用宿主机docker命令

1
2
3
4
5
6
7
-v /etc/localtime:/etc/localtime:ro
-v /var/run/docker.sock:/var/run/docker.sock
-v $(which docker):/usr/bin/docker
-v /etc/docker:/etc/docker


docker exec {容器名} bash -c 'mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2'

10.device or resource busy

  • 错误内容
1
Error response from daemon: container ebd41f555dc1f027eb76eb74ecd14f803a07bbacd2cb9bc4ee1143fa68e90c66: driver "btrfs" failed to remove root filesystem: Failed to destroy btrfs snapshot /volume1/@docker/btrfs/subvolumes for 78f48d4542b189e1b2603fd4d55cb3a2fcb091bc76f3a5023e7bcf33baeac1ba: device or resource busy
  • 检查
1
grep docker /proc/*/mountinfo |grep 78f48d4542b189e1b2603fd4d55cb3a2fcb091bc76f3a5023e7bcf33baeac1ba
输出类似这样的东西,其中/proc/之后的数字是pid:
1
2
/proc/2232/mountinfo:347 258 0:27 /@docker/btrfs/subvolumes/78f48d4542b189e1b2603fd4d55cb3a2fcb091bc76f3a5023e7bcf33baeac1ba / rw,relatime master:1 - btrfs /dev/vg1/volume_1 rw,synoacl,nospace_cache,metadata_ratio=50
/proc/2340/mountinfo:347 258 0:27 /@docker/btrfs/subvolumes/78f48d4542b189e1b2603fd4d55cb3a2fcb091bc76f3a5023e7bcf33baeac1ba / rw,relatime master:1 - btrfs /dev/vg1/volume_1 rw,synoacl,nospace_cache,metadata_ratio=50
  • 查看占用的进程
1
2
ps -p 2232 -o comm=
ps -p 2340 -o comm=
  • 结束进程
1
2
kill -9 2232
kill -9 2340