侧边栏壁纸
博主头像
Wood Chen博主等级

独唱独酬,独行独坐还独卧

  • 累计撰写 233 篇文章
  • 累计创建 166 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

docker容器内的项目,无法运行curl(访问或监控)外部网页链接

wood
2023-06-11 / 0 评论 / 0 点赞 / 81 阅读 / 2839 字

docker容器内的项目,无法运行curl(访问或监控)外部网页链接

AI摘要

本文介绍了一个Docker容器中无法访问外部网络链接的问题,并提供了解决方案。首先需要进入容器内部排查问题,如果发现没有安装Curl则需要安装。建议在Dockerfile中将Curl添加到安装的软件包列表中以确保容器构建时被安装,避免类似问题的发生。安装后重新测试,应该就可以正常访问外部网络链接了。

先排查问题

进入docker容器内,直接命令行访问链接

sudo docker exec -it [container_id] /bin/bash #填入自己的容器ID或名称,进入容器

如果这一步都报错,提示没有/bin/bash​​​​​比如以下报错内容

OCI runtime exec failed: exec failed: unable to start container process: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown

那说明一个问题,容器中似乎没有/bin/bash​​​​​。这可能是因为容器基于一个仅包含最基本组件的基础镜像(如alpine​​​​​镜像)。

尝试使用/bin/sh​​​​​​作为容器内的shell:

sudo docker exec -it [container_id] /bin/sh

到这里,应该可以正确进入容器内的命令行了,运行以下命令来测试能否访问外部网络

curl -s -o /dev/null -w '%{http_code}' https://www.czl.net

如果这里没问题,返回200,那说明不是我找到的这个问题,可以跳过并去问chatgpt了。

但是如果这里报错了,比如以下内容:

/bin/sh: curl: not found

那就是我找到的这个问题了,这个容器镜像根本没有curl,自然无法访问外部网络链接了,可以按照以下方法进行安装。

安装curl

看起来容器中没有安装curl​。这可能是导致无法运行脚本的原因。要解决此问题,您需要在容器中安装curl​。

既然容器使用的是Alpine Linux,请运行以下命令来安装curl​:

apk update
apk add curl

完成后,可以再次测试curl​命令:

curl -s -o /dev/null -w '%{http_code}' https://www.czl.net

如果curl​命令现在可以在容器内正常运行,请尝试重新启动服务并检查其状态。

为了避免将来遇到类似的问题,建议在Dockerfile中将curl​添加到安装的软件包列表中,以确保它在构建容器时被安装。这是一个示例Dockerfile片段,用于安装curl​:

FROM alpine
RUN apk update && apk add curl
...

将该片段添加到Dockerfile中,并重新构建容器。这样一来,就可以确保curl​始终可用于脚本。

安装过程命令行应该显示为:

/usr/src/vigil # apk update
fetch https://dl-cdn.alpinelinux.org/alpine/v3.17/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.17/community/x86_64/APKINDEX.tar.gz
v3.17.3-250-g30850c73a4c [https://dl-cdn.alpinelinux.org/alpine/v3.17/main]
v3.17.3-250-g30850c73a4c [https://dl-cdn.alpinelinux.org/alpine/v3.17/community]
OK: 17823 distinct packages available
/usr/src/vigil # apk add curl
(1/5) Installing ca-certificates (20230506-r0)
(2/5) Installing brotli-libs (1.0.9-r9)
(3/5) Installing nghttp2-libs (1.51.0-r0)
(4/5) Installing libcurl (8.1.2-r0)
(5/5) Installing curl (8.1.2-r0)
Executing busybox-1.35.0-r29.trigger
Executing ca-certificates-20230506-r0.trigger
OK: 9 MiB in 20 packages

安装后再测试,应该就正常了

curl -s -o /dev/null -w '%{http_code}' https://www.czl.net
200

0

评论区