как запустить две команды оболочки в разных папках в docker -составить - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь докеризировать свое приложение. Он состоит из основного компонента. NET и внешнего интерфейса Angular, настроенного следующим образом:

  1. root папка

    • docker -композит
    • Dockerfile

    • веб-подпапка (содержит Angular внешний интерфейс)
    • API-подпапка (содержит. NET Core backend)

Я могу успешно создать контейнер используя docker -compose и Dockerfile. Я не могу понять, как на самом деле запустить приложение в Docker. Обычно, когда я хочу запустить приложение локально на моем компьютере, я выполняю команду do tnet run из папки api с помощью Powershell, а затем в другом окне Powershell запускаю команду ng serve из веб-папки. Как мне запустить две команды оболочки из двух разных папок в docker -compose или Dockerfile?

Я попытался добавить две команды в конец Dockerfile следующим образом:

RUN cd api && dotnet run api.csproj

RUN cd web && ng serve

Docker запускает первую строку, но никогда не попадает на следующую строку. Я предполагаю, что мне нужно выдавать команды из docker -композиции, но я не знаю, как go об этом.

ОБНОВЛЕНИЕ: В ответ на разбиение приложения на два разных контейнера, две части зависят друг от друга. Бэкэнд имеет символическую ссылку на внешний интерфейс. Когда серверный модуль инициализируется, он проверяет, установлен ли узел, и существует ли папка node_modules из внешнего интерфейса, если нет, то возникает ошибка. В контейнере docker мне нужно сначала создать внешний интерфейс и установить узел, а затем создать внутренний. Я также решил уменьшить размер файла, поэтому имеет смысл хранить все в одном контейнере.

1 Ответ

0 голосов
/ 17 февраля 2020

Вы используете 'command1 && command2', что означает запуск команды2, если команда1 завершена с кодом выхода 0, однако команда1 никогда не завершается.

Чтобы запустить 2 процесса в одном контейнере, вы можете выполнить это guide.

Примечание: Контейнер в большинстве случаев считается одним изолированным процессом, поэтому вам следует рассмотреть возможность разделения приложения на два контейнера, один для внешнего интерфейса и один для бэкэнда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...