如何在docker compose中的不同文件夹中运行两个shell命令

如何在docker compose中的不同文件夹中运行两个shell命令,docker,docker-compose,Docker,Docker Compose,我正在尝试将我的应用程序归档。它由一个.NET核心后端和一个角度前端组成,设置如下: RUN cd api && dotnet run api.csproj RUN cd web && ng serve 根文件夹 docker compose Dockerfile web子文件夹(包含角度前端) api子文件夹(包含.NET核心后端) 我可以使用docker compose和Dockerfile成功创建容器。我不知道如何在Docker中实际运行应用程序。

我正在尝试将我的应用程序归档。它由一个.NET核心后端和一个角度前端组成,设置如下:

RUN cd api && dotnet run api.csproj

RUN cd web && ng serve
  • 根文件夹

    • docker compose
    • Dockerfile

    • web子文件夹(包含角度前端)
    • api子文件夹(包含.NET核心后端)
    我可以使用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_modules文件夹是否存在,如果不存在,则会发生错误。在docker容器中,我需要先创建前端,然后安装节点,然后创建后端。我还想把文件大小控制在一个容器中是有意义的

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

    为了在一个容器中运行两个进程,您可以遵循指南


    <强>注:在大多数情况下,容器应该是一个孤立的过程,因此你应该考虑把你的应用程序分成两个容器,一个用于前端,一个用于后端。

    在我看来,你实际上有两个不同的应用程序。在这种情况下,我通常会尝试为每个应用程序创建一个Dockerfile。您想让这两个应用程序都从一个Docker容器运行有具体原因吗?该应用程序是在后端与前端有符号链接的位置设置的。我需要先创建前端,然后再创建后端,否则应用程序在初始化时会抛出错误。起初我确实将应用程序分为两个容器,但一直遇到问题。我无法确定如何让后端容器检测前端容器中的节点和节点模块文件夹。我已签出您提供的链接。我认为应该创建一个Powershell脚本来启动两个进程。谢谢你的帮助。