有时候需要进行 build 操作,发现根目录剩余空间不够了(Docker 目录默认在 /var/lib 下),但另外一块硬盘还有空间(如 /home 目录),不想影响当前正在运行的容器,所以整体迁移 /var/lib/docker 或合并两个硬盘为 lvm 并不现实。
这时就可以开启一个新的 Docker Daemon,把 Docker 使用的目录设置为另一块硬盘
参考: http://blog.alpaca.ai/run-multiple-docker-daemons-with-net-container/
假设 docker 工作目录 为/home/cy/docker
首先需要创建网桥和 iptables 规则:
OFFSET=0
u="cy"
BRIDGE_NAME=br_${u}
DOCKER_ROOT=/home/${u}/docker
mkdir -p ${DOCKER_ROOT}
brctl addbr ${BRIDGE_NAME}
SUBNET=$(expr 52 + ${OFFSET})
ip addr add 172.18.${SUBNET}.1/24 dev ${BRIDGE_NAME}
ip link set dev ${BRIDGE_NAME} up
iptables -t nat -A POSTROUTING -j MASQUERADE -s 172.18.${SUBNET}.0/24 -d 0.0.0.0/0
运行 dockerd,建议在 screen 或 tmux 中执行:
u="cy"
BRIDGE_NAME=br_${u}
DOCKER_ROOT=/home/${u}/docker
dockerd -D \
-g ${DOCKER_ROOT}/g \
--exec-root=${DOCKER_ROOT}/e \
-b ${BRIDGE_NAME} \
--dns=8.8.8.8 \
--iptables=true \
-H unix://${DOCKER_ROOT}/docker.sock \
-p ${DOCKER_ROOT}/docker.pid
然后使用时需要加上-H 参数,你可以创建 alias 方便使用,例如
alias cydocker='docker -H unix:///home/cy/docker/docker.sock '
cydocker ps
顺手求 star 咯: https://github.com/zjuchenyuan/notebook/