【问题标题】:how to run two shell commands in different folders in docker-compose如何在docker-compose的不同文件夹中运行两个shell命令
【发布时间】:2020-02-16 20:26:11
【问题描述】:

我正在尝试 dockerize 我的应用程序。它由一个 .NET Core 后端和一个 Angular 前端组成,设置如下:

  1. 根目录

    • 码头工人撰写
    • Dockerfile

      1. web 子文件夹(包含 Angular 前端)
      2. api 子文件夹(包含 .NET Core 后端)

    我可以使用 docker-compose 和 Dockerfile 成功创建容器。我不知道如何在 Docker 中实际运行应用程序。通常,当我想在我的计算机上本地运行应用程序时,我使用 Powershell 从 api 文件夹执行“dotnet run”命令,然后在另一个 Powershell 窗口中从 web 文件夹运行“ng serve”命令。如何从 docker-compose 或 Dockerfile 中的两个不同文件夹运行两个 shell 命令?

我尝试在 Dockerfile 末尾添加两个命令,如下所示:

RUN cd api && dotnet run api.csproj

RUN cd web && ng serve

Docker 运行第一行但永远不会到达下一行。我猜我必须从 docker-compose 发出命令,但我不知道该怎么做。

更新: 为了响应将应用程序拆分为两个不同的容器,这两个部分相互依赖。后端有一个指向前端的符号链接。初始化后端时,它会检查是否安装了 node 以及是否存在来自前端的 node_modules 文件夹,如果不存在则发生错误。在 docker 容器中,我需要先创建前端并安装节点,然后再创建后端。我还想减小文件大小,将所有内容保存在一个容器中是有意义的。

【问题讨论】:

  • 在我看来,您实际上有两个不同的应用程序。在这种情况下,我通常会尝试为每个应用程序创建一个 Dockerfile。您是否有特定的原因要让这两个应用程序从单个 Docker 容器中运行?
  • 应用程序设置在后端具有指向前端的符号链接的位置。我需要先创建前端然后再创建后端,否则应用程序在初始化时会抛出错误。

标签: docker docker-compose


【解决方案1】:

您正在使用“command1 && command2”,这意味着如果 command1 以退出代码 0 退出,则运行 command2,但 command1 永远不会退出。

要在一个容器中运行 2 个进程,您可以遵循 this 指南。

注意:在大多数情况下,一个容器应该是一个独立的进程,因此您应该考虑将您的应用程序分成两个容器,一个用于前端,一个用于后端。 p>

【讨论】:

  • 一开始我确实将应用程序分成了两个容器,但一直遇到问题。我不知道如何让后端容器检测节点和前端容器中的 node_modules 文件夹。
  • 我查看了您提供的链接。我认为要走的路是创建一个将启动两个进程的 Powershell 脚本。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多