簡體   English   中英

解決 Docker 容器中的 Go 依賴

[英]Resolving Go dependencies in Docker container

我想在 Docker 鏡像構建期間構建我的 Go 應用程序,並將鏡像入口點設置為構建的 Go 應用程序。 問題是我的 Go 應用程序是主包的子包,並使用主包中的其他一些子模塊。 這個主包在 Github 上作為私有存儲庫,所以我不能直接go get容器。

我已經嘗試設置 Glide 依賴管理器並將容器外的所有依賴項放入vendor/目錄中,但還有另一個問題 - 在主私有存儲庫中每次提交后都必須更新 glide.lock。 這對我來說不是解決方案,因為我想鎖定其他依賴項。

有沒有辦法用最新版本的主包依賴項和其他依賴項的鎖定版本來構建應用程序?

這不是圍棋問題。 這是一個 Docker 和安全問題。

首先,在構建過程中構建 Go 應用程序並不理想。 通常,您會在您的機器上本地構建二進制文件,以您設置的 Dockerfile FROM目標。 沒有理由不這樣做,因為每台機器都有一個 Go 編譯器,你可以 GOOS 和 GOARCH 以任何機器為目標。

但是對於您的用例,使用私有存儲庫,更重要的是不要在容器中構建,因為無論您如何將代碼放入容器中進行構建,您都會擁有一個包含私有文件的容器,或者更糟的是您的 ssh 密鑰。 您必須上傳和托管並在某處運行的容器。

不管你怎么看,這都不理想。

但是,如果您決定泄露您的代碼和/或密鑰,您只有兩種選擇:

  • 在你的本地/構建機器上git clone私有倉庫 yhat 被授權訪問私有倉庫並在你的 Dockerfile 中使用COPY來復制它。

  • 使用 Dockerfile COPY將您已為遠程存儲庫授權的本地計算機的 SSH 密鑰復制到容器中,以便您可以運行 git 命令(您還需要安裝 git 和 ssh)。

同樣,這些並不理想。 在本地構建 Go 應用程序,定位容器的類型,然后復制二進制文件。 這真的再簡單不過了。

至於依賴管理,我從未使用過 glide; 但是,我用/vendor寫了一個關於版本依賴的流行答案。

我應該如何在 Go 1.6 中使用供應商?

如果您只關心能夠從 docker 容器中go get您的私有存儲庫,並且不介意在構建它時復制您的 id_rsa,您可以將其添加到 Dockerfile 的開頭:

RUN echo "[url \"git@github.com:\"]\n\tinsteadOf = https://github.com/" >> /root/.gitconfig
RUN mkdir /root/.ssh && echo "StrictHostKeyChecking no " > /root/.ssh/config
COPY id_rsa /root/.ssh/id_rsa

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM