如何使用未提交的本地证书文件通过 GitHub 操作构建 Docker 图像

How to build an Docker image with GitHub actions using uncommited local certificate files

我已经设置了一个 GitHub 操作工作流程,当我将代码推送到我的存储库中的一个分支时,GitHub 操作帮助我构建该存储库的映像并将其推送到 Docker Hub,工作正常。

问题是我现在有我想保留在本地的证书文件(即不推送到我的 GitHub 存储库)——但这也意味着 GitHub 操作不会在构建图像时无法访问它们,因此它们不会包含在 Docker Hub 上的构建图像中,我用它来拉入我的生产服务器 - 我现在没有我的证书文件. 如何设置 GitHub 操作以使用本地文件以某种方式构建图像?或者有更好的方法解决这个问题吗?

我的 GitHub 动作文件

name: Build and deploy project to Docker Hub

on:
 push:
   branches:
     - master

jobs:


 build:
   runs-on: 'ubuntu-latest'

   steps:
   - uses: actions/checkout@v2

   - name: Set up Docker Buildx
     uses: docker/setup-buildx-action@v1

   - name: Log in to Docker Hub - Main web app container registry
     uses: docker/login-action@v1
     with:
       username: ${{ secrets.USERNAME }}
       password: ${{ secrets.PASSWORD }}

   - name: Build and push Main web app container image to registry
     uses: docker/build-push-action@v2
     with:
       push: true
       tags: ${{ secrets.USERNAME }}/project:latest
       file: ./Dockerfile.prod

好吧,现在我觉得自己很蠢:)

我一直在考虑如何通过将它包含在镜像的构建阶段来解决它,并没有想到当你开始构建镜像时你可以选择使用驻留的“卷”在您启动 docker 图像的机器上。

就这么简单:

  1. 使用 SCP 将包含我的证书文件的文件夹从我的 GitHub 存储库的本地版本复制到我服务器上的远程版本的存储库,例如:

scp -r $(pwd)/Certificates_prod user@server:/path/to/repo/on/server

  1. 进入您的 docker-compose 文件并进入应该使用证书文件的容器下并将该文件夹添加为已安装的卷,例如:
restart: always
image: index.docker.io/username/reponame
command: gunicorn myrepo.wsgi:application --bind 0.0.0.0:8000 
volumes:
  - /local/path/to/Certificates_prod:/remote/path/to/your/repo