【问题标题】:Equivalent docker run command of a docker-compose file [closed]docker-compose 文件的等效 docker run 命令[关闭]
【发布时间】:2019-08-19 02:03:09
【问题描述】:

我正在开发一个项目,其 docker-compose.yml 文件具有很多相互依赖关系:

version: '3'

services:
  accounts:
    build:
      context: ./accounts
      dockerfile: Dockerfile
    restart: on-failure
    depends_on:
      - ganache
    volumes:
      - ./accounts/src:/app/src
      - ./accounts/config:/app/config
      - ./accounts/.babelrc:/app/.babelrc
    environment:
      VIRTUAL_HOST: accounts.nightfall.docker

  api-gateway:
    build:
      context: ./API-Gateway
      dockerfile: Dockerfile
    restart: on-failure
    volumes:
      - ./api-gateway/src:/app/src
      - ./api-gateway/.babelrc:/app/.babelrc
    environment:
      VIRTUAL_HOST: api.nightfall.docker

  ...

volumes:
  mongo-volume:
    driver: local
    driver_opts:
      type: none
      device: $PWD/../local/mongo-volume
      o: bind
  zkp-keys:
    driver: local
    driver_opts:
      type: none
      device: $PWD/../local/zkp-keys
      o: bind

我的理解是 Docker Compose 的工作方式是通过参数化运行每个服务来命名服务、连接端口并连接 Docker Compose 配置中指定的顶级卷。

我想每个 Docker 服务都会有等效的命令,这就是 Compose 的工作原理。

我如何找到或制作这些等效的命令,以便我可以自己启动这些服务,一个接一个地使用 Docker Compose 获得相同的结果?

【问题讨论】:

  • 您到底想完成什么?为什么不简单地使用docker-compose?您阅读了哪些文档,以及您不确定如何使用 Docker cli 工具复制此 compose 文件的哪些特定部分?
  • 我已经尝试过docker-compose up,这需要花费大量时间来构建我不关心的服务。我的目标是了解一项特定的服务,以便在评估整个系统之前对其进行记录并确保它正常工作。
  • 如果您不关心这些服务,只需将它们从docker-compose.yml 文件中删除?此外,目前尚不清楚您不清楚该撰写文件的哪些部分。目前,这个问题的内容是“向我解释 docker-compose 的工作原理”,有点宽泛。如果您可以将范围缩小到特定的技术问题,您将获得更好的答案。
  • 我想完全按照这个问题的要求去做。原因是让命令单独运行并避免在这样做时出错。我认为这个问题目前非常集中,并且怀疑“我无法回答这个问题,所以让我解决一个更普遍的问题”的倾向。

标签: docker docker-compose


【解决方案1】:

好的,让我试着让你出去。这里有 2 项服务。 accountsapi-gateway

让我们尝试为accounts创建等效的docker命令。

  accounts:
    build:
      context: ./accounts
      dockerfile: Dockerfile
    restart: on-failure
    depends_on:
      - ganache
    volumes:
      - ./accounts/src:/app/src
      - ./accounts/config:/app/config
      - ./accounts/.babelrc:/app/.babelrc
    environment:
      VIRTUAL_HOST: accounts.nightfall.docker

它有一个构建步骤,所以我们需要先构建图像。 cdaccounts 目录并运行docker build -t myrepo/accounts:latest .

这将构建一个名为 myrepo:accounts 的图像。现在我们必须运行图像。我们有以下属性

    restart: on-failure
    depends_on:
      - ganache
    volumes:
      - ./accounts/src:/app/src
      - ./accounts/config:/app/config
      - ./accounts/.babelrc:/app/.babelrc
    environment:
      VIRTUAL_HOST: accounts.nightfall.docker

具有上述属性的docker命令是

docker run myrepo:accounts --restart on-failure \
   -v "./accounts/src:/app/src" \
   -v "./accounts/config:/app/config" \
   -v "./accounts/.babelrc:/app/.babelrc" \
   -e "VIRTUAL_HOST=accounts.nightfall.docker"

这里,-v 映射卷,-e 映射环境变量。

下一个服务api-gateway 和上面一样。

【讨论】:

  • 超级有帮助,谢谢,这正是我想要的。
【解决方案2】:

您可以解决这个问题的一种方法是使用--verbose 标志。这将显示所有带有 Docker Compose 正在调用的参数的 SDK 命令,您可能可以从中计算出等效的 Docker 命令。

docker-compose --verbose up -d

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多