Хост виртуальной машины Docker в Windows 7 за корпоративным прокси-сервером не может связаться с прокси-сервером или более широким Интернетом

Добро пожаловать в еще один немного другой вариант «докер-машины за корпоративным прокси».

Я достаточно уверен, что это не точное повторение других вопросов по этой предметной области, поскольку я потратил уйму времени, пытаясь найти другие потенциальные решения, найденные здесь, но безрезультатно, но поскольку я абсолютно запутался, ну вот...

Симптом:

root@default:/home/docker# docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: 
proxyconnect tcp: dial tcp: lookup dev-webaccess on 10.0.2.3:53: no such host.
See 'docker run --help'.

Похоже, он пытается разрешить мой прокси (dev-webaccess) внутри виртуальной машины и терпит неудачу. Также кажется, что я не могу ничего пропинговать за пределами виртуальной машины. Такое ощущение, что это плохая конфигурация сети на виртуальной машине, так как трафик не может выйти, но я не уверен, в чем именно может быть проблема.

Как я сюда попал:

  1. Установите Docker Toolbox 18.03.0-ce в Windows 7 с драйвером VirtualBox + NDIS6.
  2. Добавьте переменные среды прокси в start.sh Docker Toolbox, используемые терминалом быстрого запуска Docker: start.sh

  3. Запустите терминал быстрого запуска. Кажется, все идет нормально: введите здесь описание изображения Детали прокси также попадают в config.json для машины по умолчанию: введите здесь описание изображения

  4. Затем, после выполнения eval $(docker-machine env default), мы можем подключиться по ssh к машине по умолчанию: введите здесь описание изображения

  5. А затем, если мы попробуем docker run hello-world, начнется самое интересное: введите здесь описание изображения

Вот вывод route в default-machine: введите здесь описание изображения

Итак, вот, наконец, вопрос: есть ли что-нибудь о конфигурации прокси или сети, показанной здесь, что объясняет, почему трафик не может выйти из виртуального бокса default-machine на мой прокси и в более широкий Интернет? С моей точки зрения, не связанной с сетью, это выглядит так, как будто трафик пытается покинуть виртуальную машину через eth0 и вообще никуда не может уйти.

Я был бы рад, если бы мне сказали, что я идиот и упустил здесь что-то ослепительно очевидное...


person Bannatyne84    schedule 25.09.2018    source источник
comment
HTTPS_PROXY также должен быть http://....   -  person kakabali    schedule 25.09.2018
comment
bcoz он работает на 8080 на том же порту... также добавьте имя пользователя и пароль в URL-адреса прокси-сервера   -  person kakabali    schedule 25.09.2018
comment
@kakabali Учетные данные указаны в URL-адресе прокси-сервера, но я их стер по очевидным причинам. Порт 8080, указанный в URL-адресе прокси-сервера, — это порт, на котором прокси-сервер принимает входящие соединения, т. е. порт 8080 используется на каком-то удаленном компьютере, а не локально или внутри vm afaik.   -  person Bannatyne84    schedule 26.09.2018
comment
используйте http вместо https в вашей переменной HTTPS_PROXY   -  person kakabali    schedule 26.09.2018
comment
Изменение этого, к сожалению, не имеет никакого эффекта   -  person Bannatyne84    schedule 27.09.2018
comment
только прокси..   -  person kakabali    schedule 27.09.2018
comment
Не уверен, к чему вы клоните - я пробовал настройку прокси-сервера https только с http:// в качестве протокола.   -  person Bannatyne84    schedule 27.09.2018


Ответы (1)


Кажется, я решил эту проблему, хотя я не могу претендовать на то, чтобы точно знать, почему это решило ее. На самом деле это было немного неожиданно, просто забытое изменение «Я попробую что-нибудь в этот момент», о котором я прочитал здесь https://github.com/docker/machine/issues/2418

В C:\Users\user.name\.docker\machine\machines\default\config.json у меня было следующее:

"HostOptions": {
    "Driver": "",
    "Memory": 0,
    "Disk": 0,
    "EngineOptions": {
        "ArbitraryFlags": [],
        "Dns": null,
        "GraphDir": "",
        "Env": [
            "HTTP_PROXY=http://user.name:password@dev-webaccess:8080",
            "HTTPS_PROXY=https://user.name:password@dev-webaccess:8080"
        ],

Я просто удалил явные протоколы (http://, https://), сделал docker-machine provision default и вуаля! Моя виртуальная машина работает как сон:

"HostOptions": {
    "Driver": "",
    "Memory": 0,
    "Disk": 0,
    "EngineOptions": {
        "ArbitraryFlags": [],
        "Dns": null,
        "GraphDir": "",
        "Env": [
            "HTTP_PROXY=user.name:password@dev-webaccess:8080",
            "HTTPS_PROXY=user.name:password@dev-webaccess:8080"
        ],

Если кто-нибудь может объяснить, почему это оказалось исправлением, я хотел бы знать.

person Bannatyne84    schedule 01.10.2018