在 Docker 中使用私有模块构建 Go 应用程序

2024-04-24

我正在尝试在依赖于私有子模块的 docker 容器中构建一个 go 项目。

我本来希望--mount=type=ssh会将我的 ssh 凭据传递给容器并且它会起作用。目前我可以在本地构建,只需制作GOPRIVATE变量集和git config update.

这是我的相关Dockerfile现在

# syntax = docker/dockerfile:experimental

FROM golang:1.14.3-alpine AS build
RUN apk add --no-cache git \
                openssh-client \
                ca-certificates

WORKDIR /src
ENV GIT_TERMINAL_PROMPT=1
ENV GOPRIVATE="gitlab.com/company_foo"
RUN git config --global url."ssh://[email protected] /cdn-cgi/l/email-protection".insteadOf "https://gitlab.com"



# Authorize SSH Host
# Skip Host verification for git
RUN mkdir -p /root/.ssh && \
    chmod 0700 /root/.ssh && \
    ssh-keyscan gitlab.com > /root/.ssh/known_hosts &&\
    chmod 644 /root/.ssh/known_hosts && touch /root/.ssh/config \
    && echo "StrictHostKeyChecking no" > /root/.ssh/config

COPY go.mod go.sum .
RUN --mount=type=ssh mkdir -p /var/ssh && \
    GIT_SSH_COMMAND="ssh -o \"ControlMaster auto\" -o \"ControlPersist 300\" -o \"ControlPath /var/ssh/%r@%h:%p\"" \
    go mod download
COPY . .
RUN --mount=type=cache,target=/root/.cache/go-build go build -o api-server ./cmd/api-server
RUN --mount=type=cache,target=/root/.cache/go-build go build -o migrations ./cmd/migrations

我也尝试过添加CI_JOB_TOKEN with

RUN echo -e "machine gitlab.com\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc

但这也行不通。也许我做错了。

所有这些都会导致失败:

 revision v0.0.3: unknown revision v0.0.3

与我们的一个私人回购协议有关。

任何建议将不胜感激。

我完全迷路了。


这对我有用。

FROM golang:1.14
ARG USERNAME=user1
ARG PASSWORD=secret

WORKDIR /app
ADD . .
ENV GOPRIVATE=private.git.local/*
RUN echo "machine private.git.local login $USERNAME password $PASSWORD" > ~/.netrc

RUN go build -o testGo main.go
CMD ["/app/testGo"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Docker 中使用私有模块构建 Go 应用程序 的相关文章

  • GitLab CI语法来编写FOR循环语句?

    以下是 gitlab ci yml 文件中提到的脚本 此 GitLab CI 配置有效 但是 当运行 CI CD 构建时 作业会失败 与 FOR 循环语法有关吗 deploy dv stage deploy dv variables GIT
  • 如何用 Go 将多个字符串解析为模板?

    有没有像这样的简单方法template ParseFiles base html home html 但是对于字符串来说 如何从一组字符串构建模板 我有一个基本模板和一个页面模板列表 全部为字符串 我想在基本模板之上构建它们 我想出了如何合
  • Airbrake 抛出错误“pybrake - 错误 - strconv.ParseInt:解析“None”:无效语法”

    我正在尝试按照中描述的步骤在 Django 项目中使用 Airbrake 记录器https github com airbrake pybrake django integration https github com airbrake p
  • 在 .gitlab-ci.yml 上找不到curl命令

    我有一个 gitlab ci yml 文件 它创建一些 docker 镜像并将其推送到 AWS ECR 当我运行curl命令将一些工件推送到远程存储库时 它显示curl 未找到 我已经在使用 openjdk 映像进行 gradlew 构建
  • 识别推文消息中正确的主题标签索引

    我需要识别 Twitter 消息 各种语言 表情符号等 中的正确索引 我找不到返回这些位置的解决方案 如下例所示 import regexp testing github com stretchr testify require func
  • 为什么 golang 堆配置文件中的“Total MB”小于顶部的“RES”?

    我有一个用 go 编写的服务 在运行时需要 6 7G 内存 RES 在顶部 所以我使用 pprof 工具试图找出问题所在 go tool pprof pdf http
  • 如何在AWS批处理中定义根卷大小

    我正在使用 AWS Batch 但发现根卷大小对于我的任务来说太小 我尝试创建一个新的计算环境 作业队列 但没有任何选项来设置卷大小 我尝试更改启动配置here https console aws amazon com ec2 autosc
  • 无法在 Dockerfile 中运行 sysctl 命令

    我正在尝试制作我的第一个 dockerfile 我对此很陌生 并且我需要系统来运行命令sysctl w kernel randomize va space 0 它是一个实验室环境 但我收到错误 sysctl 设置键 kernel rando
  • 世博会错误 - 无法加载所有资源

    由于某种原因 当第一次使用命令启动我的应用程序时expo r ci no dev我收到Failed to load all assets error 收到错误的图像 https i stack imgur com pcvv4 png 如果我
  • Python脚本仅在Docker中产生僵尸进程

    我有相当复杂的设置 Luigi https github com spotify luigi https github com spotify luigi https github com kennethreitz requests htm
  • 如何在Go中从interface{}解组到interface{}

    我的系统中有多个通过 RPC 进行通信的节点 我正在尝试通过 RPC 将 map string interface 发送到另一个节点 发送方使用 json Marshal 接收方使用 json Unmarshal 来获取地图 假设在发送方
  • 空或不需要的结构字段

    我有两个结构体 代表将插入到 mongodb 数据库中的模型 一个结构 投资 将另一个结构 集团 作为其字段之一 type Group struct Base Name string json name bson name type Inv
  • 使用 docker stack 部署主机环境变量

    我想知道是否有一种方法可以使用从部署容器的主机获取的环境变量 而不是从容器所在的主机获取的环境变量docker stack deploy命令被执行 例如想象以下docker compose yml在三节点 Docker Swarm 集群上启
  • 如何让 Docker 容器访问主机上的 dnsmasq 本地 DNS 解析器?

    Docker 容器可能会通过多种方式对 DNS 设置感到困惑 只需在 SO 或更广泛的互联网上搜索 Docker DNS 即可了解我的意思 建议的常见解决方法之一是 将 dnsmasq 设置为主机系统上的本地 DNS 解析器 将其绑定到do
  • 是否可以在一台机器上使用 GitHub 和 GitLab?

    我的账户位于GitHub and GitLab 我生成了 RSA 密钥并将其添加到我的帐户中GitLab 但现在我需要与GitHub在第二个项目上 我知道GitLab和GitHub都使用git 请告诉我是否可以在一台机器上使用 GitHub
  • Docker容器CPU使用率监控

    根据 docker 的文档 我们可以通过以下方式获取 docker 容器的 CPU 使用率码头工人统计命令 CPU 列将给出容器正在使用的主机 CPU 的百分比 假设我限制容器使用 50 的主机单个 CPU 我可以通过 cpus 0 5 选
  • Jenkinsfile 泊坞窗

    我正在 docker 容器内的 GCE 上运行一个 jenkins 实例 并希望从此 Jenkinsfile 和 Github 执行多分支管道 我正在使用GCE詹金斯 https cloud google com solutions con
  • 启动 docker 容器时向主机 /etc/hosts 文件添加条目

    我希望能够将主机名添加到映射到 docker 容器的笔记本电脑 etc hosts 中 由于容器 ip 不是静态的 因此我启动 重新启动容器的每个站点都需要手动更新 etc hosts 文件 这不太实用 我正在寻找一种简单的方法来解决这个问
  • 地图中的最大元素数

    GO 中的 Map 最多可以存储多少个元素 如果我需要经常从 Map 访问数据 那么在长时间运行的程序中不断向 Map 添加项目并从中检索项目是一个好主意吗 除了map length类型的最大值之外 map中的元素数量没有理论上的限制 in
  • 将具有联合字段的 C 结构映射到 Go 结构

    我从 Go 中的某些 WinApi 的系统调用中获取结果 我可以轻松地从 C 代码映射简单的结构 但是如何处理如下所示的 C 结构 typedef struct SPC LINK DWORD dwLinkChoice define SPC

随机推荐

  • 使用 Socket.IO 的 Python 客户端到 nodeJS 服务器

    我正在尝试使用 socket io 将值从我的树莓派 在 python 2 7 9 中 发送到我的 nodeJS 服务器 我的目标是通过 websocket 连接从我的 pi 连续发送许多值到我的节点服务器 本地 该服务器应该获取这些值并将
  • NSFetchedResultsController 在 VIPER 架构中的位置是什么?

    In VIPER https www objc io issues 13 architecture viper 与MVC不同的是 NSFetchedResultsController的角色和地点没有那么明确的定义 把它放在交互器上合适吗 根
  • 如何获取当前显示的片段?

    我正在Android中玩fragment 我知道我可以使用以下代码更改片段 FragmentManager fragMgr getSupportFragmentManager FragmentTransaction fragTrans fr
  • 如何使用 Perl 检查文件的扩展名?

    对于我的 Perl 脚本 一个文件作为参数传递 该文件可以是 txt文件或一个 zip文件包含 txt file 我想编写看起来像这样的代码 if file is a zip unzip file file s zip txt 检查扩展的一
  • 如何删除 prestashop 1.6.1 上的送货步骤?

    我是新来的预斯塔商店我在删除送货步骤时遇到了很大的麻烦 因为我只销售虚拟产品 我正在使用 prestashop 1 6 1 我知道我必须修改order carrier tpl文件并关注了几篇帖子 但无法正确完成 你们中有人对如何做到这一点有
  • 重置rails中的主键id

    当我从表中删除所有并开始再次插入时 我遇到主键如何递增的问题 这是有问题的 因为我还有与已清除表关联的其他模型 例如 如果我有属于 Computer 的 Apple 那么当我清除 Computer 表并重新添加计算机时 关联会变得混乱 因为
  • Android 应用内计费:使用 sku android.test.purchased 时出错(响应:5:开发人员错误)

    我已通过标准助手发送了测试购买意向 String SKU android test purchased mHelper launchPurchaseFlow this SKU 10001 mPurchaseFinishedListener
  • 在 ngrx 上创建非记忆选择器

    是否可以在 ngrx 上创建非记忆选择器 我有一个非常小的选择器来检查存储中的值是否大于 Date now export const selectAuthState createFeatureSelector
  • Where 子句返回所有行中的值错误?

    我有一个如下所示的查询 SELECT id username FROM table name WHERE username 0 当我运行此查询时 MySQL 返回 table name 中的所有行 此外 如果我用 0 代替 false 我会
  • 如何在 Delphi 控制台应用程序中运行控制台应用程序?

    我希望我的控制台应用程序启动另一个控制台应用程序 显示另一个应用程序想要显示的所有内容 然后在另一个应用程序完成并退出后执行某些操作 基本上 Writeln Started ShellExecute 0 open another exe n
  • 处理Oauth 2.0-facebook gem错误100:此授权码已被使用

    我一直在为我的 Rails 应用程序设置 Facebook 身份验证 在测试时 使用我的 Facebook 帐户登录后 我不断收到此错误 OAuth2 Error error message This authorization code
  • Django:编程错误关系不存在

    设置新数据库heroku我试过python manage migrate并得到许多与相关的异常relation already exists does not exists 所以我按照这里的说明进行操作django 1 9 编程错误 关系
  • 如何避免添加多个 NSNotification 观察者?

    目前 API 似乎没有提供一种方法来检测是否已为特定 NSNotification 添加了观察者 除了在端维护一个标志来跟踪之外 避免添加多个 NSNotification 观察者的最佳方法是什么 有人已经创建了一个类别来促进这一点吗 防止
  • 如何设置 CirclePageIndicator 上的项目限制?

    I m using a ViewPager and a CirclePageIndicator from ViewPagerIndicator lib to show images with some circles below but t
  • Shadow DOM v1 CSS 填充

    https developers google com web fundamentals getting started primers shadowdom https developers google com web fundament
  • 如何在实体框架代码优先中设置 0..* 关系?

    我有两个类的下一个代码 public class Object public int ObjectID get set public int Object2ID get set public virtual Object2 Object2
  • MediaButtonIntentReceiver 在 Android 4.0+ 中不工作

    目标是拦截来自耳机以及蓝牙的广播 以响应来自耳机的不同类型的点击来改变媒体播放器 该解决方案适用于 ICS 之前的所有版本 这是我尝试过的一些代码和事情 private BroadcastReceiver mediaButtonReceiv
  • Wicket、页面堆栈和内存使用情况

    Wicket 应用程序序列化并缓存所有页面以支持有状态组件 以及支持后退按钮 以及其他可能的原因 我有一个使用 setResponsePage 在屏幕之间导航的应用程序 在很短的时间内 会话就会变得相当大 因为所有先前的页面都存储在会话中
  • 如何在 IIS 7.5 中启用 GZIP 压缩

    我想使用 GZIP 压缩我的文件 您能分享一下使用 GZIP 压缩文件的 web config 代码吗 上传 web config 文件后还需要做什么吗 GZip 压缩可以直接通过 IIS 启用 首先 打开IIS 转到您希望调整的网站并点击
  • 在 Docker 中使用私有模块构建 Go 应用程序

    我正在尝试在依赖于私有子模块的 docker 容器中构建一个 go 项目 我本来希望 mount type ssh会将我的 ssh 凭据传递给容器并且它会起作用 目前我可以在本地构建 只需制作GOPRIVATE变量集和git config