docker 不联网环境下启动nginx镜像提示错误:怎么解决呢?

docker 不联网环境下启动nginx镜像提示错误:ERROR: failed to solve: nginx:1.23.3: failed to do request: Head "https://qlmy5iw9.mirror.aliyuncs.com/v2/library/nginx/manifests/1.23.3?ns=docker.io%22: dial tcp 116.62.81.173:443: i/o timeout怎么解决呢?

[root@localhost nginx-deploy]# docker build -t web . 
[+] Building 60.0s (3/3) FINISHED                                                                                                                                docker:default
 => [internal] load build definition from Dockerfile                                                                                                                       0.0s
 => => transferring dockerfile: 198B                                                                                                                                       0.0s
 => [internal] load .dockerignore                                                                                                                                          0.0s
 => => transferring context: 2B                                                                                                                                            0.0s
 => ERROR [internal] load metadata for docker.io/library/nginx:1.23.3                                                                                                     60.0s
------
 > [internal] load metadata for docker.io/library/nginx:1.23.3:
------
Dockerfile:1
--------------------
   1 | >>> FROM nginx:1.23.3
   2 |     
   3 |     #jnpf的配置文件
--------------------
**ERROR: failed to solve: nginx:1.23.3: failed to do request: Head "https://qlmy5iw9.mirror.aliyuncs.com/v2/library/nginx/manifests/1.23.3?ns=docker.io": dial tcp 116.62.81.173:443: i/o timeout**

联网情况下运行正常:

[root@localhost nginx-deploy]# docker build -t web .
[+] Building 18.0s (7/7) FINISHED                                                                                                                                docker:default
 => [internal] load build definition from Dockerfile                                                                                                                       0.0s
 => => transferring dockerfile: 198B                                                                                                                                       0.0s
 => [internal] load .dockerignore                                                                                                                                          0.0s
 => => transferring context: 2B                                                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/nginx:1.23.3                                                                                                           18.0s
 => [internal] load build context                                                                                                                                          0.0s
 => => transferring context: 92B                                                                                                                                           0.0s
 => [1/2] FROM docker.io/library/nginx:1.23.3@sha256:f4e3b6489888647ce1834b601c6c06b9f8c03dee6e097e13ed3e28c01ea3ac8c                                                      0.0s
 => CACHED [2/2] COPY lxc347.conf /etc/nginx/conf.d/                                                                                                                       0.0s
 => exporting to image                                                                                                                                                     0.0s
 => => exporting layers                                                                                                                                                    0.0s
 => => writing image sha256:6ad6e7c01ccbadb3073a4656ad61602b76ab3c529e6f7a58caf4f279eb7f3822                                                                               0.0s
 => => naming to docker.io/library/web                                                                                                                                     0.0s
[root@localhost nginx-deploy]# 

其中dockerfile文件内容:

FROM nginx:1.23.3
#jnpf的配置文件
COPY lxc347.conf /etc/nginx/conf.d/
#开放端口
EXPOSE 80

deploy.sh文件内容:

 #!/bin/bash
  #镜像名称
  CONTAINER_IMAGE=nginx:master-$(date +%Y%m%d%H%M)
  #容器名称
  CONTAINER_NAME=nginx
  #构建镜像
  docker build -t $CONTAINER_IMAGE .
  #停止之前的容器
  docker stop $CONTAINER_NAME || true && docker rm -f $CONTAINER_NAME || true
  #运行新的容器,/home/deploy/front是JNPF前端项目地址
  docker run --network=bridge -d -p 3000:80 -v /home/deploy/front:/home/deploy/front --name $CONTAINER_NAME $CONTAINER_IMAGE

【以下回答由 GPT 生成】

问题分析:

根据错误信息,问题出现在无法解析manifest的步骤上。当我们在构建镜像时,Docker会尝试从远程仓库(在这里是docker.io)获取所需的镜像层。然而,在不联网的情况下,Docker无法连接到远程仓库,因此无法解析manifest,从而导致构建过程失败。

解决方案:

要解决这个问题,我们可以使用本地镜像作为基础镜像,而不是从远程仓库获取。下面是解决问题的步骤:

  1. 在联网的环境中,从远程仓库拉取所需的镜像,并保存到本地:
docker pull nginx:1.23.3

这将下载名为nginx、标签为1.23.3的镜像。

  1. 确认镜像已成功下载,并可在本地访问:
docker images

输出类似以下内容:

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        1.23.3    123456789abc   2 weeks ago   133MB
  1. 在不联网的环境中,使用本地镜像作为基础镜像来构建新的镜像。在Dockerfile中修改FROM语句如下:
FROM nginx:1.23.3
  1. 使用docker build命令构建镜像:
docker build -t web .

这将使用本地的nginx:1.23.3镜像作为基础镜像进行构建。

  1. 确认构建成功:
docker images

输出中应该包含一个新的名为web、标签为latest的镜像。

这样,您就可以在不联网的环境中成功构建nginx镜像了。

希望这个解决方案对您有帮助。如果您有任何疑问,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

引用 皆我百晓生 小程序回复内容作答:
在不联网的环境下启动nginx镜像出现错误是因为无法访问外部镜像仓库。要解决这个问题,可以通过以下方法之一:

  1. 使用离线方式加载镜像:在联网的环境下,使用docker pull命令下载nginx镜像并导出为一个tar文件。将该tar文件转移到不联网的环境中,然后使用docker load命令加载该离线镜像文件。接下来,在Dockerfile中使用该离线镜像作为基础镜像进行构建。

  2. 在联网的环境下,使用docker save命令将nginx镜像导出为一个tar文件,并将该文件转移到不联网的环境中。然后使用docker load命令加载该离线镜像文件。在Dockerfile中使用该离线镜像作为基础镜像进行构建。

  3. 在联网的环境下,使用docker save命令将nginx镜像导出为一个tar文件,并将该文件上传到不联网的服务器上。然后在不联网的环境中,使用docker load命令加载该离线镜像文件。在Dockerfile中使用该离线镜像作为基础镜像进行构建。

  4. 在联网的环境下,使用docker build命令构建镜像时,增加--network=none参数。这将禁止容器访问网络,从而避免访问外部镜像仓库。注意,这种方法在构建过程中无法使用apt-get等命令安装软件包。

选择合适的方法根据你的实际环境和需求进行操作即可。