如何在GitHub Actions运行的Dockerfile中引用ghcr存储的镜像
Dockerfile引用GHCR存储镜像的方法
1. 确认镜像的完整GHCR路径
GHCR上存储的所有镜像都遵循统一命名规则:ghcr.io/<GitHub用户名/组织名>/<镜像名称>:<镜像标签>
举个实际示例:如果你的GitHub用户名为demo-user,打包的Ubuntu+Miniconda基础镜像命名为python-env-base,打包时打的标签为v2.0,那么该镜像的完整路径为 ghcr.io/demo-user/python-env-base:v2.0
小提示:建议给基础镜像使用固定的版本标签(如v1.0、20240601)而非latest,避免基础镜像更新后意外影响你的项目构建结果
2. 编写Dockerfile的FROM语句
直接将上述完整路径写在FROM指令后即可,示例Dockerfile内容如下:
# 引用GHCR上存储的公共/私有基础镜像 FROM ghcr.io/demo-user/python-env-base:v2.0 # 后续添加你的项目自定义配置 WORKDIR /opt/project # 挂载项目卷(按需配置) VOLUME [ "/opt/project/data" ] # 复制项目代码 COPY . . # 其余启动命令等自定义指令 CMD [ "python", "main.py" ]
3. GitHub Actions运行时的权限配置(仅私有镜像需要)
如果你的GHCR基础镜像是私有状态,需要在GitHub Actions工作流配置中添加GHCR登录步骤,否则会出现镜像拉取权限报错,示例工作流配置:
jobs: build-image: runs-on: ubuntu-latest steps: # 拉取仓库代码 - uses: actions/checkout@v4 # 登录GHCR获取镜像拉取权限 - name: Login to GHCR uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} # 后续执行构建镜像等操作 - name: Build project image run: docker build -t project-image .
提示:如果是同账号/同组织下的仓库调用镜像,默认的GITHUB_TOKEN自带同账号下GHCR镜像的拉取权限,无需额外生成个人访问令牌;如果是跨账号调用私有镜像,需要生成拥有GHCR读权限的PAT存入仓库密钥后替换上述的secrets.GITHUB_TOKEN即可
内容的提问来源于stack exchange,提问作者Piotr
相关产品推荐
相关产品推荐

