防止在docker-compose中跳过

pet*_*ltz 1 django docker docker-compose

我有一个docker-compose.yml带有后端的Django网络应用程序.它看起来像这样:

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
Run Code Online (Sandbox Code Playgroud)

当我跑sudo docker-compose build,第一行输出说

db uses an image, skipping. 
Building web.
Run Code Online (Sandbox Code Playgroud)

我需要db之前构建的图像web.

如何db首先构建图像?

dam*_*mon 5

您可以在构建之前db分离模式启动容器web:

$ docker-compose up -d db
$ docker-compose build web
Run Code Online (Sandbox Code Playgroud)

虽然,这似乎是一种反模式.我建议您尽可能保持构建过程web尽可能通用,而是使用环境变量或command参数来完成此任务.

例如,如果您需要将相同的配置值传递给双方webdb,你可以使用做到这一点env_file:

# db_credentials.env
USER="django"
PASSWORD="********"
DATABASE="django_db"
Run Code Online (Sandbox Code Playgroud)

在您的docker-compose.yml文件中:

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

  web:
    # ...
    env_file: db_credentials.env
Run Code Online (Sandbox Code Playgroud)