【问题标题】:"internet connection issue" while creating Docker Image创建 Docker 映像时出现“互联网连接问题”
【发布时间】:2020-06-25 22:12:33
【问题描述】:

我有一台 CentOS 7.0 主机 Docker 版本 19.03.4,安装了 build 9013bf583a。我正在尝试创建一个简单的 docker 映像

我有以下 Docker 文件。

FROM alpine:edge
MAINTAINER javaonfly
RUN apk update && apk add --no-cache openjdk8

(请注意,我已根据下面 LinPy 给出的答案将 RUN 命令更新为“更新”) 在上面的 docker 文件中,我只是使用 alpine:edge 作为基础 docker 容器,然后用 openjdk8 更新它。然后我执行以下命令

sudo docker build --network=host --file=docker.txt --tag=myrep/image1 --rm=true .

我看到以下输出

Sending build context to Docker daemon  87.04MB
Step 1/3 : FROM alpine:edge
 ---> 7eacb6761fa1
Step 2/3 : MAINTAINER javaonfly
 ---> Using cache
 ---> 77818d634212
Step 3/3 : RUN apk update && add --no-cache openjdk8
 ---> Running in d438f2522d6a
fetch http://dl-cdn.alpinelinux.org/alpine/edge/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/edge/main: network error (check Internet connection and firewall)
WARNING: Ignoring APKINDEX.066df28d.tar.gz: No such file or directory
ERROR: http://dl-cdn.alpinelinux.org/alpine/edge/community: network error (check Internet connection and firewall)
WARNING: Ignoring APKINDEX.b53994b4.tar.gz: No such file or directory
2 errors; 14 distinct packages available
The command '/bin/sh -c apk update && add --no-cache openjdk8' returned a non-zero code: 2

在宿主机上,我可以成功运行命令docker run hello-world。我还可以从主机 ping 到 www.google.com。但是,似乎 alpine:edge 容器无法连接到互联网。

我也用这个命令进入了 alpine:edge 容器,并在 shell 中执行了命令 ping www.google.com,但是 ping 卡住了,没有结果。

sudo docker run -it --rm alpine:edge

以下是 alpine:edge shell 中 ifconfig 命令的结果

eth0      Link encap:Ethernet  HWaddr 02:42:C0:A8:DC:01
          inet addr:192.168.220.1  Bcast:192.168.220.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:698 (698.0 B)  TX bytes:630 (630.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

以下是主机上 ip addr show 命令的结果。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:56:bf:b9:c6 brd ff:ff:ff:ff:ff:ff
    inet 10.211.164.24/32 brd 10.211.164.24 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:febf:b9c6/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
16: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:6f:8a:2e:79 brd ff:ff:ff:ff:ff:ff
    inet 192.168.220.2/24 brd 192.168.220.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:6fff:fe8a:2e79/64 scope link
       valid_lft forever preferred_lft forever

我在 SO 中遇到了许多与此问题相关的问题,但没有一个能解决我的问题。

【问题讨论】:

  • 根据经验,docker 镜像没有软件存储库信息/缓存以具有较小的大小,因此当您需要安装某些东西时,您需要更新 repo 索引 (apk update , apt update...)
  • 尝试“docker build –network=host”。
  • 我试过了,但得到了同样的错误
  • This 对我有帮助。

标签: docker


【解决方案1】:

我已经解决了这个问题。我的主机位于代理服务器后面。看来 docker build 命令也需要提及代理服务器。我执行了以下命令,解决了我的问题。

sudo docker build --build-arg http_proxy=http://proxyserver:8080 --build-arg https_proxy=https://proxyserver:8080 --file=dockerfile.txt --tag=myrep/image1 --rm=true .

【讨论】:

    【解决方案2】:

    同样的问题。
    CentOS 主机上的 Docker 版本 19.03.8。
    从容器内部:

    • ping 外部 ip 正常
    • dns 解析正常
    • apk 添加 -> 错误:http://dl-cdn.alpinelinux.org/alpine/edge/main:网络错误
      在构建 alpine-jdk 期间未指定 --network 选项(因此使用默认桥接模式)。
      我们通过在 alpine-jdk 构建中设置参数 --network=host 来解决:
    docker build --network=host --file=Dockerfile-jdk8 --tag=alpine-jdk:base --rm=true .
    

    Dockerfile-jdk8:

    FROM alpine:edge
    RUN apk add --no-cache openjdk8
    

    【讨论】:

    • 此解决方案适用于从 Dockerfile 构建,但是否有适用于 docker-compose 的解决方案? (从 docker-compose.yml 构建)
    【解决方案3】:

    先尝试update

    FROM alpine:edge
    MAINTAINER javaonfly
    RUN rm -rf /var/cache/apk/* && rm -rf /tmp/*
    RUN apk update && apk add --no-cache openjdk8
    

    【讨论】:

    • 我仍然收到错误消息。不过,错误消息略有变化。我已经用新的错误消息更新了主要问题。
    • 我仍然看到同样的错误。我觉得这个错误与 Internet 连接有关,与 JDK 无关。
    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2011-02-14
    • 2018-01-21
    • 2013-08-16
    相关资源
    最近更新 更多