基于amazonlinux镜像构建Docker容器时遇Curl错误(6)求助
问题
基于amazonlinux:latest镜像构建Docker容器时,yum install步骤出现域名解析错误,核心报错为:
#6 0.378 - Curl error (6): Couldn't resolve host name for https://cdn.amazonlinux.com/al2023/core/mirrors/2023.0.20230322/x86_64/mirror.list [getaddrinfo() thread failed to start] #6 0.378 Error: Failed to download metadata for repo 'amazonlinux': Cannot prepare internal mirrorlist: Curl error (6): Couldn't resolve host name for https://cdn.amazonlinux.com/al2023/core/mirrors/2023.0.20230322/x86_64/mirror.list [getaddrinfo() thread failed to start]
已知条件:
- 团队其他成员使用相同Dockerfile/docker-compose.yml可正常构建
- 本地
docker run -it centos curl google.com执行正常,但docker run -it amazonlinux curl google.com报相同错误,添加--security-opt seccomp=unconfined后恢复正常 - 尝试在
~/.docker/daemon.json中设置"seccomp-profile":"unconfined"失败,提示找不到配置文件
解决方案
1. 临时修改docker-compose.yml(仅针对当前服务)
在服务配置中添加security_opt参数,直接禁用seccomp限制:
version: "3" services: image-resize-on-the-fly: build: . volumes: - ./secrets:/deploy/secrets env_file: - ./secrets/secrets.env security_opt: - seccomp:unconfined
修改后执行docker-compose up --build即可正常构建。
2. 全局设置Docker默认禁用seccomp(永久生效)
Docker的daemon.json中不能直接指定unconfined作为配置文件名,需通过空字符串来禁用seccomp:
- 编辑
~/.docker/daemon.json(若文件不存在则创建):
{ "seccomp-profile": "" }
- 重启Docker守护进程:
sudo systemctl restart docker
此后所有新建容器都会默认禁用seccomp限制,无需每次手动添加参数。
3. 单次构建/运行时手动指定参数
如果不想修改配置文件,可在构建或运行时直接添加安全选项:
- 单独构建镜像:
docker build --security-opt seccomp=unconfined -t image-resize-on-the-fly .
- 使用docker-compose构建:
docker-compose build --security-opt seccomp=unconfined
原因分析
该问题源于Amazon Linux 2023的getaddrinfo函数依赖线程创建,而Docker默认的seccomp安全配置限制了部分线程相关的系统调用(如clone3),导致线程启动失败,进而无法完成域名解析。禁用seccomp限制或调整配置允许相关系统调用即可解决问题。
内容的提问来源于stack exchange,提问作者Derek Schilling
相关产品推荐
相关产品推荐

