首页 > 解决方案 > 使用 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 驱动程序特有的问题?

标签: dockerproxydocker-composegitlab-ci-runnerdocker-machine

解决方案


推荐阅读