当前位置: 首页 > 知识库问答 >
问题:

Docker Compose-如何执行多个命令?

轩辕庆
2023-03-14

我想做这样的事情,我可以在以下代码中运行多个命令:

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个答案

申高峰
2023-03-14

我建议使用<code>sh<code>而不是<code>bash<code>因为它在大多数基于Unix的映像(alpine等)上更容易使用。

下面是一个< code>docker-compose.yml的示例:

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"

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

  • python管理。py wait_for_db-等待数据库准备就绪
  • python管理。py migrate-运行任何迁移
  • python管理。py runserver 0.0.0:8000-启动我的开发服务器
长孙修远
2023-03-14

我在一个单独的临时容器中运行启动前的东西,比如迁移,就像这样(注意,组合文件必须是版本“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

这有助于保持清洁和分离。需要考虑的两件事:

>

  • 您必须确保正确的启动顺序(使用depends_on)。

    您希望避免多次构建,这可以通过第一次使用构建和映像对其进行标记来实现;你可以引用其他容器中的图像。

  • 司空高义
    2023-03-14

    想通了,使用bash-c

    例:

    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
      "
    
     类似资料:
    • 问题内容: 我想做这样的事情,我可以依次运行多个命令。 问题答案: 想通了,使用 。 例: 多行中的相同示例: 要么:

    • 问题内容: 我试图在一行中合并多个Linux命令以执行部署操作。例如 问题答案: 如果仅在上一个命令成功的情况下才执行每个命令,请使用运算符将它们组合: 如果其中一个命令失败,则将不执行其后的所有其他命令。 如果要执行所有命令而不管先前的命令是否失败,请使用分号将它们分开: 在您的情况下,我想您希望第一种情况下,下一条命令的执行取决于上一条命令的成功。 您还可以将所有命令放在脚本中,然后执行该脚本

    • 我是maven的新手,我想同时执行2个java文件。我在StackOverflow中读了几篇文章,因为我对maven的了解有限,所以我不明白如何做到这一点。我在这里附加了我的pom.xml文件,我在mac终端中使用的命令行是: mvn编译执行:Java-dexec . main class = " org . parallel . parse thread 1 " 我有另一个名为ParseThre

    • 我希望在中运行多个命令,如下所示: 那么如何保存上一个命令的状态并将其用于下一个命令??

    • 问题内容: def exec_command(self, command, bufsize=-1): #print “Executing Command: “+command chan = self._transport.open_session() chan.exec_command(command) stdin = chan.makefile(‘wb’, bufsize) stdout = c