2016-07-15 63 views
0

我有一個帶有後端的Django web應用程序的docker-compose.yml。它看起來像這樣:防止在docker-compose中跳過

version: '2' 

services: 
    db: 
    image: # special image 
    ports: 
     - "1433:1433" 
    environment: 
     PASSWORD: "*********" 

    web: 
    build: . 
    command: python manage.py runserver 0.0.0.0:8000 
    ports: 
     - "8000:8000" 
    depends_on: 
     - db 

當我運行sudo docker-compose build,輸出的第一行說

db uses an image, skipping. 
Building web. 

我需要db圖像0​​年前建成。

我該如何讓db圖像先建好?

+1

假設你意味着'運行'的數據庫圖像,而不是'建立'?你如何期待這裏的行爲與發生的事情不同? – johnharris85

+0

@JHarris是的,'跑'而不是'建立'。 Web構建需要'db'啓動並運行才能完成。這就是爲什麼我需要'db'才能首先運行。 – peterkshultz

+0

大體上同意黑人機器人的答案。這似乎是不好的設計。你不能初始化數據庫連接/依賴運行,而不是構建?使整個事情變得更加健壯。 – johnharris85

回答

5

您可以建立webDetached mode啓動db容器:

$ docker-compose up -d db 
$ docker-compose build web 

雖然,這seems like an anti-pattern。我建議您保持web的構建過程儘可能通用,並改爲使用環境變量或command arguments來完成此操作。

例如,如果您需要將相同的配置值傳遞給兩個webdb,你可以使用an env_file做到這一點:

# db_credentials.env 
USER="django" 
PASSWORD="********" 
DATABASE="django_db" 

而在你docker-compose.yml文件:

services: 
    db: 
    # ... 
    env_file: db_credentials.env 

    web: 
    # ... 
    env_file: db_credentials.env