Я нахожусь в процессе создания сервиса, который, среди прочего, позволяет пользователям запускать/останавливать веб-сервер Golang по своему усмотрению. Чтобы получить сервер Nodejs, работающий при подобных обстоятельствах, я просто выдаю nodejs /path/to/index.js &disown
из командного файла, который я запускаю при запуске контейнера. Существенные битыЗапуск golang webserver внутри Dockercontainer
ADD gorun.sh /usr/local/bin/gorun.sh
RUN chmod +x /usr/local/bin/gorun.sh
...
ENTRYPOINT ["/bin/bash"]
CMD ["/usr/local/bin/gorun.sh"]
Это работает отлично, каждый раз. В gorun.sh
У меня есть линия nodejs /path/to/index.js & disown
.
Теперь, когда я пытаюсь получить веб-сервер Golang, работающий в аналогичных условиях, я думал, что попробую тот же подход. Я изменил сценарий gorun.sh на чтение
#! /bin/bash
go run /path/to/index.go & disown;
ps aux | grep go
Теперь вот странная вещь. Я пытался получить сервер Go начал два способов
- Сугубо в качестве эксперимента я начал контейнер Docker с терминалом, подключенным в называется
gorun
из терминала. Сервер Golang сразу заработал, и все было ханкри-дори. - Чтобы лучше подражать тому, как все работает в реальном мире - я разместил файл startgo.txt в заранее определенном месте, которое затем получает задание CRON, которое вызывает gorun. На этот раз без радости - сервер не запускается.
Почему бы просто не позвонить go run /path/to/index.go & disown
из сценария запуска контейнера Docker? Пробовал это тоже - тот же результат: сервер не запускается.
Непонятно, что здесь происходит. Почему сервер Nodejs запускается, а сервер golang отказывается от пустой точки? Почему он запускается, если я запускаю один и тот же сценарий из терминала? Я бы очень признателен за любую помощь в решении этих проблем.
Не используйте 'идти run'. Создайте или установите требуемый двоичный файл. (ваш 'ps aux | grep go' не получает серверный процесс, это инструмент go go) – JimB