You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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:

  1. 编辑~/.docker/daemon.json(若文件不存在则创建):
{
  "seccomp-profile": ""
}
  1. 重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:05:29