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

如何让运行oras的Docker容器通过凭证助手获取Docker凭证

容器化ORAS访问私有仓库(凭证助手场景)的解决方案

针对你遇到的用容器化ORAS访问私有仓库时,凭证助手无法在容器内工作的问题,提供以下几种可行方案:

方案1:直接传递提取后的凭证到容器

既然你已有能从凭证助手提取凭证的脚本,可在主机上先拿到凭证,再通过环境变量或临时配置文件传入ORAS容器,绕过容器内的凭证助手依赖。

方式A:通过环境变量传递凭证

在主机上执行脚本提取凭证,再将用户名和密码通过环境变量传入容器(ORAS支持通过ORAS_USERNAME和ORAS_PASSWORD指定仓库凭证):

# 用你的脚本获取凭证(假设返回JSON格式的用户名密码)
CREDS=$(your-cred-helper-script.sh)
USERNAME=$(echo "$CREDS" | jq -r '.username')
PASSWORD=$(echo "$CREDS" | jq -r '.password')

# 运行ORAS容器,传递凭证环境变量
docker run -it --rm \
  -v $(pwd):/workspace \
  -e ORAS_USERNAME="$USERNAME" \
  -e ORAS_PASSWORD="$PASSWORD" \
  ghcr.io/oras-project/oras:v1.1.0 pull "$MY_OCI_IMAGE"

方式B:生成临时配置文件挂载

如果ORAS需要完整的Docker配置格式,可在主机上生成包含凭证的临时config.json,再挂载到容器:

# 提取凭证
CREDS=$(your-cred-helper-script.sh)
USERNAME=$(echo "$CREDS" | jq -r '.username')
PASSWORD=$(echo "$CREDS" | jq -r '.password')
REGISTRY=$(echo "$MY_OCI_IMAGE" | cut -d'/' -f1)

# 生成临时config.json
cat > /tmp/oras-config.json <<EOF
{
  "auths": {
    "$REGISTRY": {
      "username": "$USERNAME",
      "password": "$PASSWORD"
    }
  }
}
EOF

# 挂载临时配置并运行ORAS
docker run -it --rm \
  -v $(pwd):/workspace \
  -v /tmp/oras-config.json:/root/.docker/config.json:ro \
  ghcr.io/oras-project/oras:v1.1.0 pull "$MY_OCI_IMAGE"

# 清理临时文件
rm /tmp/oras-config.json

方案2:构建包含凭证助手的自定义ORAS镜像

如果团队需要频繁使用凭证助手,可自行构建包含ORAS、凭证助手及依赖工具(如jq)的镜像,让容器内直接支持凭证助手逻辑。

示例Dockerfile

FROM ghcr.io/oras-project/oras:v1.1.0

# 安装依赖(基于ORAS官方镜像的debian基础环境,按需调整)
RUN apt-get update && apt-get install -y --no-install-recommends jq ca-certificates

# 复制主机上的凭证助手二进制到容器(替换为你的凭证助手路径)
COPY /usr/bin/docker-credential-xxx /usr/bin/

# 确保容器能读取Docker配置
ENV DOCKER_CONFIG=/root/.docker

使用步骤

  1. 构建自定义镜像:
docker build -t my-oras-with-credhelper .
  1. 运行时挂载主机的.docker目录(包含凭证助手配置):
docker run -it --rm \
  -v $(pwd):/workspace \
  -v $HOME/.docker:/root/.docker:ro \
  my-oras-with-credhelper pull "$MY_OCI_IMAGE"

注意:如果凭证助手依赖主机的系统服务(如Linux钥匙环、macOS Keychain),此方案无法工作,因为容器无法访问主机的这类服务。

方案3:挂载凭证助手二进制及存储目录(限无服务依赖的助手)

如果你的凭证助手是基于文件存储、无系统服务依赖的,可直接将主机上的凭证助手二进制和它的存储目录挂载到容器:

docker run -it --rm \
  -v $(pwd):/workspace \
  -v $HOME/.docker:/root/.docker:ro \
  -v /usr/bin/docker-credential-xxx:/usr/bin/docker-credential-xxx:ro \
  -v $HOME/.docker/xxx-credentials:/root/.docker/xxx-credentials:ro \
  ghcr.io/oras-project/oras:v1.1.0 pull "$MY_OCI_IMAGE"

此方式让容器内的ORAS通过config.json找到凭证助手,读取挂载的凭证存储文件完成认证。


内容的提问来源于stack exchange,提问作者Nikolai Prokoschenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:40:55