2016-05-31 36 views
4

我在想如何在docker build期間向Docker容器注入憑據的最佳做法。 在我的Dockerfile中,我需要獲取需要基本身份驗證的資源Web服務器,並且正在考慮如何將憑據插入容器而不對它們進行硬編碼的正確方法。如何在構建期間將憑據帶入Docker容器

.netrc文件和curl --netrc ...一起使用呢?但是安全呢?我不喜歡將憑證與我的Dockerfile一起保存在源存儲庫中的想法。

是否有任何方式來使用參數或環境變量注入憑據?

任何想法?

+0

看到https://stackoverflow.com/questions/32664729/how-can-i-pass-secret-data-to-a-container – user2915097

+1

我認爲這裏的這個問題是關於只傳遞_build_的憑據,例如從構建期間解壓縮一些URL獲取發佈zip的憑據,容器運行時應用程序的_not_憑證(以上鍊接問題是關於什麼的)。 'ARG'可以適用,但對於證書來說這並不安全,因爲這些值保存在圖像元數據中,並且可以通過「docker history」顯示給任何擁有圖像文件的人。 –

回答

0

一些新的Docker功能使它比以前更加優雅和安全。新的multi-phase builds讓我們實現了一個Dockerfile的構建器模式。該方法將我們的憑證放入臨時「構建器」容器中,然後該容器構建一個不含任何祕密的新容器。

您可以選擇如何將您的憑證存入您的構建器容器。例如:

  • 使用環境變量:ENV creds=user:passcurl https://[email protected]
  • 使用build-arg傳遞憑據
  • 複製SSH密鑰倒入容器:使用Credential Helpers
  • COPY key /root/.ssh/id_rsa
  • 使用您的操作系統自身的安全憑證

Dockerfile

## Builder 
FROM alpine:latest as builder 
# 
# -- insert credentials here using a method above -- 
# 
RUN apk add --no-cache git 
RUN git clone https://github.com/some/website.git /html 
# 
## Webserver without credentials 
FROM nginx:stable 
COPY --from=builder /html /usr/share/nginx/html 
相關問題