进行外部连接以在Windows的docker映像上安装git时出错

时间:2019-07-15 23:37:14

标签: windows docker docker-compose dockerfile

预期行为 在Windows的docker image上安装git / make等软件包时,应成功建立与外部Urls的连接

实际行为

  

获取   http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz

     

错误:http://dl-cdn.alpinelinux.org/alpine/v3.9/main:临时错误   (稍后重试)

     

警告:忽略APKINDEX.b89edf6e.tar.gz:没有此类文件或目录   错误:http://dl-cdn.alpinelinux.org/alpine/v3.9/community:临时   错误(请稍后再试)

信息 我有一个本地设置 Docker桌面社区版本2.0.0.3,通道=稳定 操作系统:Windows 10 Enterprise Edition 64位。

我还使用Docker Desktop启用了Kubernetes v1.10.11。

我在使用docker-compose build命令创建映像时安装git(如下所述)

错误: 错误1:

  

第6/7步:运行apk更新&& apk添加--no-cache git

     

--->在327463a09bef中运行,获取了http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz

     

错误:http://dl-cdn.alpinelinux.org/alpine/v3.9/main:DNS查找   错误警告:忽略APKINDEX.b89edf6e.tar.gz:无此类文件或   目录获取   http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz

     

错误:http://dl-cdn.alpinelinux.org/alpine/v3.9/community:DNS查找   错误警告:忽略APKINDEX.737f7e01.tar.gz:无此类文件或   目录2错误;提供53种不同的包装

采取的行动: 使用ipconfig / all在我公司中找到DNS服务器详细信息,并使用它更新了Docker Daemon Advanced设置:

{
"registry-mirrors": [],
"insecure-registries": [],
"debug": true,
"experimental": false,
"dns": [
"xx.x.xxx.x"
]
}

发布此DNS错误后消失,但我收到以下错误:

错误2:

  

第6/7步:运行apk更新&& apk添加--no-cache git   --->在5a75ec688b68中运行

     

获取   http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz   取   http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz

     

错误:http://dl-cdn.alpinelinux.org/alpine/v3.9/main:临时错误   (稍后重试)

     

警告:忽略APKINDEX.b89edf6e.tar.gz:没有此类文件或目录   错误:http://dl-cdn.alpinelinux.org/alpine/v3.9/community:临时   错误(请稍后再试)

     

警告:忽略APKINDEX.737f7e01.tar.gz:没有此类文件或目录   2个错误; 53个不同的软件包可用错误:服务“服务测试”   构建失败:命令'/ bin / sh -c apk更新&& apk添加   --no-cache git'返回了非零代码:2

我尝试过的其他方法: 1,创建了一个新的出站防火墙规则,以允许所有从docker.exe出现到外部URL的连接 2.使用名称服务器xx.x.xxx.x更新了Windows主机上的resolve.conf文件,并重新启动了Docker

下面是我在C:\ ProgramData \ DockerDesktop \ service.txt文件中看到的日志

  

/v1.30/build?t=感兴趣的注册&q = False&nocache = False&rm = True&forcerm = False&pull = False \ n“ [19:29:48.857][Moby] [Info] [11683.758106] docker0:端口   1(vetheb98adc)进入阻止状态

     

[19:29:48.887] [Moby] [Info] [11683.818430] docker0:端口   1(vetheb98adc)进入了禁用状态

     

[19:29:48.916] [Moby] [Info] [11683.849358]设备vetheb98adc已进入   混杂模式

     

[19:29:48.951] [Moby] [Info] [11683.878312] IPv6:ADDRCONF(NETDEV_UP):   vetheb98adc:链接尚未准备好

     

[19:29:49.032] [Moby] [Info] [11683.970198] IPVS:创建网络   大小= 2104 id = 22

     

[19:29:49.061] [Moby] [Info] [11683.994398] IPVS:ftp:已加载支持   在端口[0] = 21

     

[19:29:49.191] [Moby] [Info] [11684.130505] eth0:从   veth117829a

     

[19:29:49.262] [Moby] [Info] [11684.190674] IPv6:   ADDRCONF(NETDEV_CHANGE):vetheb98adc:链接已准备就绪   [19:29:49.292] [Moby] [Info] [11684.223896] docker0:端口   1(vetheb98adc)进入阻止状态

     

[19:29:49.324] [Moby] [Info] [11684.253478] docker0:端口   1(vetheb98adc)进入了转发状态[19:29:59.697] [Moby] [Info]   [11694.616873] docker0:端口1(vetheb98adc)进入了禁用状态

     

[19:29:59.719] [Moby] [Info] [11694.660049] veth117829a:从   eth0 [19:29:59.828][Moby] [Info] [11694.760730] docker0:端口   1(vetheb98adc)进入了禁用状态

     

[19:29:59.854] [Moby] [Info] [11694.789712]设备vetheb98adc左   混杂模式[19:29:59.888] [Moby] [Info] [11694.815720] docker0:   端口1(vetheb98adc)进入禁用状态

     

[19:30:00.150] [ApiProxy] [Info] time =“ 2019-07-13T19:30:00 + 10:00”   msg =“ proxy <<开机自检   /v1.30/build?t=感兴趣的注册&q = False&nocache = False&rm = True&forcerm = False&pull = False   (12.2535104s)\ n“

我很确定这与我的公司防火墙规则有关,该规则阻止了传出流量。这两个高山URL都可以从我的浏览器访问。如果我需要开放任何端口以进行传出流量,那么实际要做的就是数周以来被封锁的地方。

相同的设置适用于我的家庭网络中的所有个人Windows 10笔记本电脑,其中所有docker和kubernetes版本都完全相同。

Windows版本:Windows 10 Enterprise Edition 64位 Docker桌面版本:Docker桌面社区版本2.0.0.3,Channel =稳定 重现行为的步骤 Dockerfile:

FROM openjdk:8u191-jre-alpine
VOLUME /tmp
COPY target/*.jar app.jar
ENTRYPOINT [ "java","-Djava.security.egd=file:/dev/./unrandom","-Dspring.profiles.active=local","-Daws.accessKeyId=XXXXX","-Daws.secretKey=XXXXX","-jar","/app.jar"]
RUN apk update 
&& apk add --no-cache git

docker-compose.yml

version: '3.3'
services:
service-test:
  image: service-image
  ports:
    8181:8443
    5005:5005
  build: '../service-test-project'


Docker command used:

docker-compose build --build-arg http_proxy='http://xx:xxx@corp-proxy.corp.dmz:8080' --build-arg https_proxy='http://xx:xxx
@corp-proxy.corp.dmz:8080' --build-arg HTTPS_PROXY='http://xx:xxx@corp-proxy.corp.dmz:8080' --build-arg HTTP_PROXY='http://xx:xxx@corp-proxy.corp.dmz:8080'

1 个答案:

答案 0 :(得分:1)

我在我工作的公司中遇到了这个问题,最终我可以通过执行以下操作来解决它。

  • 下载proxy.pac文件(可以在Google上搜索此部分,不太困难)
  • 打开编辑器(崇高,vs,jetbrains,记事本)选择
  • config.json中打开C:\Users\<user>\.docker\config.json文件
  • 将以下内容添加到文件中,但将http和https代理替换为proxy.pac文件中的一个代理。 noProxy我照原样离开了,它没有影响结果。
{
"proxies": {
   "default": {
     "httpProxy": "http://my_proxy:8080",
     "httpsProxy": "http://my_proxy:8080",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}
  • 重新启动docker
  • 然后重试。 这是唯一对我有用的东西。更改ctnml.ini文件和通过Docker GUI更改代理或更改我的DNS服务器无效。