我想向 docker 守护进程开放 TCP,以便 Jenkins 可以针对它构建容器。
我得到了很多关于如何做到这一点的信息。希望得到最好的方法。
dockerd的目标:
- 通过 TCP 和本地 unix 套接字进行监听。
- 通过重启保持持久性。
- 主机特定授权以确保安全。仅允许从特定主机访问。(可以使用 iptables 完成)
这是一个 Ubuntu Xenial 主机。
当前 Dockerd 运行信息:
root@host:# ps -ef |grep dockerd
root 1171 1 0 17:51 ? 00:00:04 /usr/bin/dockerd -H fd://
Docker 配置片段(/etc/init/docker.conf):
post-start script
DOCKER_OPTS=
DOCKER_SOCKET=
if [ -f /etc/default/$UPSTART_JOB ]; then
. /etc/default/$UPSTART_JOB
fi
if ! printf "%s" "$DOCKER_OPTS" | grep -qE -e '-H|--host'; then
DOCKER_SOCKET=/var/run/docker.sock
else
DOCKER_SOCKET=$(printf "%s" "$DOCKER_OPTS" | grep -oP -e '(-H|--host)\W*unix://\K(\S+)' | sed 1q)
fi
if [ -n "$DOCKER_SOCKET" ]; then
while ! [ -e "$DOCKER_SOCKET" ]; do
initctl status $UPSTART_JOB | grep -qE "(stop|respawn)/" && exit 1
echo "Waiting for $DOCKER_SOCKET"
sleep 0.1
done
echo "$DOCKER_SOCKET is up"
fi
end script
我该如何处理这个问题?
答案1
找到了一个适用且干净的答案这个博客
脚步:
编辑此文件:
sudo vi /lib/systemd/system/docker.service
查找现有的ExecStart
行:
ExecStart=/usr/bin/docker daemon -H fd://
添加您想要的配置:
ExecStart=/usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:3272
重新开始:
systemctl daemon-reload
sudo service docker restart
此后,我的守护进程正在监听 3272 并且准备运行!
答案2
我遇到了类似的挑战。当我开始考虑将一些系统从 Ubuntu 14.04 迁移到 Ubuntu 16.04 时。我的目标是使用一个带有 dockerd 标志 (DOCKER_OPTS) 的 dockerd 配置文件,用于 Ubuntu 16.04 (systemd) 和 Ubuntu 14.04 (Upstart),而不是 /etc/docker/daemon.json。我选择不使用 /etc/docker/daemon.json 进行 docker 守护进程配置,因为 json 不支持注释。
我希望 systemd 设计使用覆盖文件,该文件仅修改 dockerd 标志。它使用默认的 Docker systemd 配置文件 (/lib/systemd/system/docker.service) 进行其他 Docker 设置。另一个目标是在每次更改或启动后在每个系统上自定义 systemd。
它解决了我的难题。它也许能帮到你。
git clone https://github.com/BradleyA/docker-security-infrastructure
cd docker-security-infrastructure/dockerd-configuration-options
more README.md