2016-05-02 99 views
1

我使用Shippable有兩個原因:自動化我的Docker鏡像的構建並傳遞加密的環境變量。我能夠自動化構建,但我無法傳遞變量。將可環境變量從Docker傳遞到Docker

我開始在項目設置中進入環境變量設置爲可發送文本框:

SECRET_KEY=123456 

我點擊「加密」按鈕,然後可交付的回報:

- secure : hash123abc... 

我把這個哈希到我的shippable.yml文件中。它看起來像:

language: python 

python: 
    - 2.7 

build_image: myusername/myimagename 

env: 

- secure : hash123abc... 

build: 
post_ci: 
    - docker login -u myusername -p mypassword 
    - docker build -t myusername/myimagename:latest . 
    - docker push myusername/myimagename:latest 

integrations: 
hub: 
    - integrationName : myintegrationname 
    type: docker 
    branches: 
    only: 
     - master 

自動構建工程!但如果我嘗試:

sudo docker run myusername/myimagename:latest echo $SECRET_KEY 

我什麼也沒得到。

我Dockerfile其設置環境變量(在這種情況下SECRET_KEY)看起來是這樣的:

FROM python:2.7.11 

RUN apt-get update 

RUN apt-get install -y git 

RUN get clone https://github.com/myusername/myrepo.git 

ENV SECRET_KEY=$SECRET_KEY 

這可能有助於解釋我的邏輯,我看到它。因爲如果它不在代碼中,我的想法可能成爲問題:

可裝運的項目構建觸發(通過回購推動或手動)。在shippable.yml它做一些事情:

  • 建立初始圖像
  • 設置SECRET_KEY環境變量
  • 建立了基於該Dockerfile
    • 的Dockerfile的新形象: - 套env變量SECRET_KEY到SECRET_KEY由早先的兩個步驟設置的.yml
  • 推動圖像

我在想,現在我已經在圖像中設置了一個環境變量,現在我可以訪問它了。但我什麼也沒得到。這裏有什麼問題?

+0

運行命令'env'來查看所有的環境變量。這可以幫助您調試問題。 –

+0

是的,謝謝。我剛剛嘗試過。它至少顯示變量,但它是空的SECRET_KEY = –

+0

您是否在碼頭集裝箱內運行它?我的意思是'.yml',比如'post_ci'。事實上,在所有階段都要做,看看是否有區別。如果語法錯誤,請看看是否有一個名爲'secure'的變量。 –

回答

1

謝謝@Alex Hall與我一起工作!

事實證明,在此設置中使用Docker傳遞環境變量必須使用簡單的標誌來啓動。所以在我的shippable.yml我改變:

- docker build -t myusername/myimagename:latest . 

- docker build --build-arg SECRET_KEY=$SECRET_KEY -t myusername/myimagename:latest . 

然後在我的Dockerfile我說:

ARG SECRET_KEY 

RUN echo $SECRET_KEY > env_file 

你瞧,關鍵是在env_file