容器内部执行宿主机Docker命令
# 问题起源
问题起源于我在使用Docker部署的Jenkins服务时,需要通过Jenkins实现Docker的持续集成,尝试使用Docker的远程Api, 但是由于本机服务器内存不足的原因,在build镜像时总是出现内存溢出的错误。
# 解决方案
docker run -d \
-u root \
--restart=always \
-p 8888:8080 \
-p 50000:50000 \
--privileged \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/bin/docker \
-v jenkins:/var/jenkins_home \
-v /etc/localtime:/etc/localtime \
--name jenkins docker.io/jenkins/jenkins
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 解析
# 1. --privileged
大约在0.6版,privileged被引入docker。使用该参数,container内的root拥有真正的root权限。 否则,container内的root只是外部的一个普通用户权限。
# 2. -u root
使用root用户创建容器
只使用
--privileged
仍不能获取root权限(不知道为啥),但是加上-u root
就可以了
# 3. 挂载宿主机Docker文件
/var/run/docker.sock
:Unix socket,Docker进程默认监听文件,为进行container进程间通信所用。
$(which docker)
:将docker命令挂载进容器中
/etc/localtime
:解决容器与宿主机的时间时区不一致的问题
编辑 (opens new window)
上次更新: 2021/02/09, 02:51:02