
00:00:00
外卖卷:非常划算 扫码领劵 省点小钱钱
Portainer 是一款免费、开源的 Docker 图形化管理工具。它提供直观的界面,简化了 Docker 的管理和操作,包括:
# 创建目录同时进入
mkdir -p /root/docker/portainer && cd $_
# 下载 docker compose 配置文件
curl -L https://img.lisir.cc/file/docker/portainer/docker-compose.yml
# 启动
docker compose up -d如果你想使用 Portainer 来管理远程服务器上的 Docker 节点,则需要配置 Docker API。
注意,开启非加密的 Docker API 是个非常危险的行为!
直接暴露未加密的 Docker API 存在安全风险!强烈建议开启 TLS 加密。
使用 0.0.0.0 监听所有网络接口可能存在安全风险,因为这会使 Docker API 可以被公开访问。
建议在生产环境中仅允许受信任的 IP 地址访问 Docker API,并使用安全连接(如 TLS)进行通信。
在目标服务器上编辑 Docker 服务配置文件:
# 命令查看 docker.service 文件所在路径
systemctl status docker.service
# 编辑 docker.service 文件
vim /usr/lib/systemd/system/docker.service修改 ExecStart 行:
配置远程访问:添加 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 参数
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock --containerd=/run/containerd/containerd.sockunix://var/run/docker.sock:unix socket,本地客户端将通过这个来连接 Docker Daemontcp://0.0.0.0:2375:tcp socket,表示允许任何远程客户端通过 2375 端口连接 Docker Daemon重新加载服务并重启 Docker:
# 重新加载服务配置文件
sudo systemctl daemon-reload
# 重启 Docker 服务
sudo systemctl restart docker创建 TLS 证书:
curl -fsSLO https://img.lisir.cc/file/shell/generate_docker_api_pem.sh && bash generate_docker_api_pem.sh这个脚本会自动生成所需的 TLS 证书文件,并保存在 /root/.docker/certs/ 目录下。
配置 Docker 服务:
编辑 Docker 服务配置文件
vim /usr/lib/systemd/system/docker.service找到 ExecStart 行,在后面添加以下选项
-H=tcp://0.0.0.0:2376 --tlsverify --tlscacert=/root/.docker/certs/ca-docker_api.pem --tlscert=/root/.docker/certs/server-cert-docker_api.pem --tlskey=/root/.docker/certs/server-key-docker_api.pem-H=tcp://0.0.0.0:2376:指定监听的 IP 地址和端口 (这里使用 2376)。--tlsverify:启用 TLS 验证。--tlscacert:指定 CA 证书的路径。--tlscert:指定服务器证书的路径。--tlskey:指定服务器密钥的路径。重新加载服务并重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker在配置完 Docker API 后,需要进行测试以确保其正常工作。
在 Portainer 所在的服务器上,使用以下命令测试是否可以连接到目标服务器的 Docker API:
# 格式 docker -H [目标服务器 IP]:[2375] info
docker -H 0.0.0.0:2375 info如果出现类似以下的提示,表示配置成功(但也表明存在安全风险):
[DEPRECATION NOTICE]: API is accessible on http://0.0.0.0:2375 without encryption.
Access to the remote API is equivalent to root access on the host. Refer
to the 'Docker daemon attack surface' section in the documentation for
more information: https://docs.docker.com/go/attack-surface/
In future versions this will be a hard failure preventing the daemon from starting! Learn more at: https://docs.docker.com/go/api-security/验证是否只能通过加密访问:
首先,尝试使用未加密的方式访问 Docker API:
docker -H 0.0.0.0:2376 info如果配置正确,应该会返回以下错误,表明 API 只能通过 HTTPS 访问:
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.9.1-docker)
Server:
ERROR: Error response from daemon: Client sent an HTTP request to an HTTPS server.
errors pretty printing info使用 TLS 验证访问:
尝试使用 --tlsverify 选项进行 TLS 验证:
docker -H 0.0.0.0:2376 --tlsverify info如果出现以下错误,表示缺少证书文件:
unable to resolve docker endpoint: open /root/.docker/ca.pem: no such file or directory配置证书:
这是因为当前用户的 ~/.docker 目录下没有配置证书。执行以下命令将证书复制到该目录下:
mv ~/.docker/certs/ca-docker_api.pem ~/.docker/ca.pem && \
mv ~/.docker/certs/server-cert-docker_api.pem ~/.docker/cert.pem && \
mv ~/.docker/certs/server-key-docker_api.pem ~/.docker/key.pem再次使用 TLS 验证访问:
完成证书配置后,再次执行以下命令:
docker -H 0.0.0.0:2376 --tlsverify info如果一切配置正确,此时应该能够成功获取 Docker 信息,表示 TLS 加密的 Docker API 已经配置成功,并且只能通过加密方式访问。
docker -H 0.0.0.0:2375 version # 查看 Docker 版本
docker -H 0.0.0.0:2375 image ls # 查看镜像包添加 Environment:
选择 API 连接方式:
配置 API 连接:
配置 TLS(如果开启了 TLS 加密):
/root/.docker/certs/ca-docker_api.pem/root/.docker/certs/cert-docker_api.pem/root/.docker/certs/key-docker_api.pem点击 "Add environment" 完成添加。
现在,你就可以在 Portainer 中管理远程 Docker 节点了。
评论