docker - 使用 docker-machine 将代理变量传递给机器
问题描述
我目前正在尝试在代理后面的 AWS 中使用 Docker-machine 执行器设置 Gitlab-runner。不知何故 docker-machine 无法正确连接到生成的机器。这是我得到的:
ubuntu@ip-42-1-0-44:~$ sudo -i docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
runner-eu3khqy-gitlab-docker-machine-1596546765-ee5149ca - amazonec2 Running tcp://42.1.0.36:2376 Unknown Unable to query docker version: Cannot connect to the docker engine endpoint
ubuntu@ip-42-1-0-44:~$ eval $(sudo -i docker-machine env runner-eu3khqy-gitlab-docker-machine-1596546765-ee5149ca)
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "42.1.0.36:2376": dial tcp 42.1.0.36:2376: connect: connection refused
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which might stop running containers.
更多细节:
到目前为止,我成功启动了 Gitlab-runner,它正在尝试生成机器。跑步者所在的机器(堡垒)和正在生成的机器都需要设置代理才能连接到互联网。因此,我在堡垒上配置了cntlm。和 /etc/systemd/system/gitlab-runner.service.d/http-proxy.conf 中的 gitlab-runner 与该代理一起工作。到目前为止,一切都很好。
为了让docker工作,我进一步配置了/etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:3128/"
Environment="HTTPS_PROXY=http://127.0.0.1:3128/"
3128 是 cntlm 正在侦听的端口。
要生成机器,我在 MachineOptions 下设置 config.toml
"engine-env=HTTP_PROXY=http://proxy.net:8080",
"engine-env=HTTPS_PROXY=http://proxy.net:8080",
"engine-env=NO_PROXY=localhost, 127.0.0.*, 10.*, 42.*, 192.168.*,
这在 => /root/.docker/machine/machines/runner-?/config.json 下变得可见
"Env": [
"HTTP_PROXY=http://proxy.net:8080",
"HTTPS_PROXY=http://proxy.net:8080",
"NO_PROXY=localhost, 127.0.0.*, 10.*, 42.*, 192.168.*,
],
调试:
所以当我使用 docker-machine ssh 连接到机器时,我找不到正在运行或安装的 docker。这是我假设代理变量不会正确传递给机器的地方。
问题:我做错了什么?如何正确地将代理变量传递给机器?
更新: 为了缩小范围,我进行了手动机器创建:
sudo -i docker-machine --debug create -d amazonec2 -amazonec2-region eu-central-1 -amazonec2-instance-type t2.micro -amazonec2-subnet-id subnet-XXXXX -amazonec2-vpc-id vpc-XXXXXX --amazonec2-use-private-address --engine-env http_proxy=http://proxy.net:8080 --engine-env https_proxy=http://proxy.net:8080 --engine-env no_proxy=localhost,127.0.0.*,10.*,42.*,192.168.* --engine-env HTTP_PROXY=http://proxy.net:8080 --engine-env HTTPS_PROXY=http://proxy.net:8080 --engine-env NO_PROXY=localhost,127.0.0.*,10.*,42.*,192.168.* docker-compose-test2
在生成的日志中,我得到了超时sudo apt-get update
。
经过多次试验并通过 ssh 连接到机器,我很确定通过的环境变量engine-env
设置不正确。也就是说,尽管我通过 检查配置,但docker-machine inspect
一切似乎都很好。
现在我想知道,这是否甚至可能是 amazonec2 驱动程序特有的问题?
解决方案
推荐阅读
- c# - Controller's action is getting called twice while loading a view
- javascript - 影响文本单击到 Reactjs 中的复选框
- android - 非常大的数据使我的应用程序在使用 ScrollView 时非常慢
- javascript - MapBox GL Javascript - 集群 - 计数不显示
- ios - 如何在 iOS 的 SwiftUI 中检测 TextField 何时失去焦点?
- ubuntu - 构建模块时“不支持内核包 linux-headers-5.0.0-2173611831”
- javascript - setInterval 打破了它的节奏
- javascript - 函数式编程偏函数和全局范围
- mongodb - 在具有身份验证的 MongoDB Docker 映像上找不到用户
- excel - 在 DOORS 模块中使用高级过滤器进行过滤