将docker镜像上传到github镜像存储仓库(GitHub 容器仓库(GHCR)使用流程)

将docker镜像上传到github镜像存储仓库(GitHub 容器仓库(GHCR)使用流程)

步骤 1:生成 GPG 密钥(核心)

bash 复制代码
gpg --gen-key

执行后会出现交互提示,按下面的指引操作:

复制代码
选择密钥类型:默认 RSA and RSA,直接回车;
选择密钥长度:默认 3072(足够安全),回车;
密钥有效期:默认 0(永不过期),回车;
确认有效期:输入 y 回车;
填写用户信息:
    Real name:随便填;
    Email address:填你的 GitHub 绑定邮箱(或任意邮箱);
    Comment:可选,直接回车;
确认信息:输入 O 回车(表示 OK);
设置密钥密码:
    输入一个简单的密码(自己记住,后续 pass 会用到);123456789
    再次输入确认,回车;
等待密钥生成:系统会要求你做一些随机操作(比如敲键盘、打开文件),等待 10-30 秒,直到提示 key created。

步骤 2:获取 GPG 密钥 ID

bash 复制代码
gpg --list-secret-keys --keyid-format LONG
bash 复制代码
sec   rsa3072/1234567890ABCDEF 2026-03-22 [SC]
      ....私钥...
uid                 [ultimate]github用户名 m <your-email@xxx.com>
ssb   rsa3072/0987654321FEDCBA 2026-03-22 [E]

步骤 3:初始化 pass

将上一步复制的密钥 ID 替换到下面的命令中执行:

bash 复制代码
pass init 1234567890ABCDEF  # 替换为你的密钥 ID

步骤 4:重新登录 Docker

bash 复制代码
docker login docker.pkg.github.com -u github用户名

Password:

Login Succeeded

步骤 5:确认本地 Docker 镜像

bash 复制代码
docker images  # 列出本地所有镜像

REPOSITORY TAG IMAGE ID CREATED SIZE

镜像名_base v1 5c6601682b2f 34 hours ago 21.2GB

步骤 6:为镜像打合规的 Tag

GitHub 镜像 Tag 规则(严格):

ghcr.io/[GitHub用户名]/[仓库名]/[镜像名]:[版本标签]

(仓库名要和 GitHub 上的代码仓库一致,否则可能权限异常)

执行打 Tag 命令

bash 复制代码
docker tag 镜像名_base:v1 ghcr.io/<你的GitHub用户名>/<你的GitHub仓库名>/镜像名_base:v1

步骤 7:验证 Tag 是否打好

bash 复制代码
docker images | grep ghcr.io

预期输出(确认有这条记录):

ghcr.io/<你的GitHub用户名>/<你的GitHub仓库名>/镜像名_base v1 5c6601682b2f 34 hours ago 21.2GB

步骤 8:推送镜像到 GHCR

bash 复制代码
docker push ghcr.io/<你的GitHub用户名>/<你的GitHub仓库名>/镜像名_base:v1

如果出现unauthorized: unauthenticated: User cannot be authenticated with the token provided.

则进入 https://github.com/settings/tokens/new 页面创建的 Token 作为密码才可以推送镜像。

打开上面的链接,勾选 write:packages 和 read:packages ,repo 会自动选中,创建 Token。

勾选好后点击generate token

bash 复制代码
sudo docker login ghcr.io -u <你的GitHub用户名>
Password输入上面生成的token

WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.

Configure a credential helper to remove this warning. See

https://docs.docker.com/go/credential-store/

Login Succeeded

授权后重新push镜像

bash 复制代码
docker push ghcr.io/<你的GitHub用户名>/<你的GitHub仓库名>/镜像名_base:v1


点击github右上角头像,列表中选profile


将镜像链接到代码仓库

选择要链接的仓库

步骤9:基础拉取镜像

在任何可以访问 GitHub 的机器上,执行以下命令拉取你上传的镜像:

bash 复制代码
# 替换成你自己的 GitHub 用户名、仓库名和镜像标签
docker pull ghcr.io/<你的GitHub用户名>/<你的GitHub仓库名>/镜像名字:镜像标签

这个命令会直接从 GHCR 下载你之前推送的镜像到本地 Docker 环境。

如果拉取时提示 unauthorized(未授权),需要先登录 GHCR。

登录 GHCR

如果你的镜像设置为私有(默认私有),拉取前需要先登录:

bash 复制代码
# 1. 执行登录命令
docker login ghcr.io -u <你的GitHub用户名>
# 2. 输入密码(即你之前创建的 GitHub Personal Access Token,需包含 read:packages 权限)
Password: <你的GitHub Token>

Token 权限要求(拉取镜像):

复制代码
至少需要勾选 read:packages 权限(如果是私有镜像,还需要 repo 权限)。
不需要 write:packages(那是推送镜像用的)。

步骤10:运行拉取后的镜像

拉取完成后,就可以像使用本地镜像一样运行它:

bash 复制代码
# 基础运行(根据你的镜像用途调整参数)
docker run -it --rm ghcr.io/<你的GitHub用户名>/<你的GitHub仓库名>/2dgsslam_base:v1

# 如果你的镜像需要端口映射、挂载目录等(示例)
docker run -it --rm -p 8080:80 -v /本地目录:/容器目录 ghcr.io/xxx/xxx/2dgsslam_base:v1

步骤11:验证镜像是否可用

运行以下命令确认镜像已成功拉取并能正常使用:

bash 复制代码
# 查看本地镜像列表(确认有 GHCR 镜像)
docker images | grep ghcr.io

# 查看容器运行状态(如果已启动)
docker ps

# 进入容器内部验证环境(可选)
docker exec -it <容器ID/容器名> /bin/bash

进阶:分享镜像给团队成员

如果需要让团队成员使用你的私有镜像:

复制代码
把你的 GitHub Token(仅含 read:packages 权限)分享给成员(或让成员自己创建 Token);
成员执行 docker login ghcr.io 后,即可拉取镜像;
(更安全)在 GitHub 仓库的 Settings > Packages 中,添加团队成员的 GitHub 账号为镜像的 "协作者",授予 Read 权限。
相关推荐
我是谁??2 小时前
Rocky9+ Docker + 容器内Linux桌面环境 + Web远程
运维·docker·容器
姓王名礼2 小时前
这是一个完整的全栈交付包,包含Vue3 前端交互界面(集成数字人视频流、ECharts 图表、语音对话)和Docker Compose 一键部署脚本。
前端·docker·echarts
eggwyw3 小时前
Redis 设置密码(配置文件、docker容器、命令行3种场景)
数据库·redis·docker
赵文宇(温玉)4 小时前
Openclaw-In-Docker新版本发布,更轻、更快、更健壮,1600+次下载,30+Github关注
docker·容器·github·小龙虾·clawclaw
CoderJia程序员甲4 小时前
GitHub 热榜项目 - 日榜(2026-03-23)
ai·大模型·llm·github·ai教程
badhope4 小时前
Docker入门到实战全攻略
linux·python·docker·github·matplotlib
daydayup95274 小时前
swarm安装使用(二)
docker·云原生·容器
daydayup95274 小时前
swarm安装使用(一)
docker·云原生·容器
Lee_SmallNorth5 小时前
docker-compose脚本一键部署 rocketmq + rocketmq-dashboard
docker·容器·rocketmq