提问者:小点点

如何使用Docker-Compose执行多个命令


我想做这样的事情,在那里我可以按顺序运行多个命令。

db:
  image: postgres
web:
  build: .
  command: python manage.py migrate
  command: python manage.py runserver 0.0.0.0:8000
  volumes:
    - .:/code
  ports:
    - "8000:8000"
  links:
    - db

共3个答案

匿名用户

找到它,使用

示例:

command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"

多行中的相同示例:

command: >
    bash -c "python manage.py migrate
    && python manage.py runserver 0.0.0.0:8000"

或者:

command: bash -c "
    python manage.py migrate
    && python manage.py runserver 0.0.0.0:8000
  "

匿名用户

我在一个单独的临时容器中运行诸如迁移之类的启动前工作,如下所示(注意,compose文件必须是'2'类型的版本):

db:
  image: postgres
web:
  image: app
  command: python manage.py runserver 0.0.0.0:8000
  volumes:
    - .:/code
  ports:
    - "8000:8000"
  links:
    - db
  depends_on:
    - migration
migration:
  build: .
  image: app
  command: python manage.py migrate
  volumes:
    - .:/code
  links:
    - db
  depends_on:
    - db

这有助于物品保持清洁和分开。需要考虑两件事:

>

您希望避免多个构建,这可以通过使用build和image在第一轮中标记它来实现;您可以引用其他容器中的图像。

匿名用户

我建议使用,而不是,因为它在大多数基于Unix的映像(alpine等)上更容易获得。

下面是一个:

version: '3'

services:
  app:
    build:
      context: .
    command: >
      sh -c "python manage.py wait_for_db &&
             python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000"

这将按顺序调用以下命令:

    -等待数据库就绪/li> -运行任何迁移/li> -启动我的开发服务器/li>