S SH docker проблема с контейнером после запуска Apache на Alpine - PullRequest
1 голос
/ 02 апреля 2020

У меня проблема в сеансе S SH с контейнером docker. На самом деле не может выполнить никакую команду из-за запущенного процесса, который никогда не дает мне руку на терминале, см. Вывод:

[Thu Apr 02 19:39:46.056749 2020] [mpm_prefork:notice] [pid 7] AH00163: Apache/2.4.43 (Unix) PHP/7.3.16 configured -- resuming normal operations
[Thu Apr 02 19:39:46.057465 2020] [core:notice] [pid 7] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

Установка Dockerfile Apache на Alpine и заканчивается:

ENTRYPOINT [ "/opt/entrypoint.sh" ]

точка входа. sh:

/usr/sbin/httpd -D FOREGROUND

Любой намек, как я могу заставить мой сеанс S SH работать и дает мне руку для выполнения других команд? Спасибо.

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Фактически перемещение команды из моего dockerfile в procfile, предоставленное моим хостинг-провайдером, решило проблему. Dockerfile после этого изменения:

FROM alpine
# install apache
# other installation requirements
EXPOSE 80
# commented the line below
# ENTRYPOINT ["/opt/entrypoint.sh"]

И перенес последнюю инструкцию в Procfile. После этого изменения процесс будет опубликован из моего контейнера, а не точка входа, которая будет выполняться каждый раз, когда образ создается или перезапускается.

1 голос
/ 02 апреля 2020

Парадигма контейнера не способствует использованию таких вещей, как серверы sh. Основная концепция заключается в том, что вы размещаете только один изолированный процесс внутри контейнера, в вашем случае 'httpd'.

Другими словами, в контейнере apache не работает сервер s sh, это только хостинг процесса веб-сервера.

Вы можете использовать команду типа docker exec <container_name> <command>, чтобы выполнить другой процесс в том же контейнере. Например:

docker exec myhttpd ls -la

, который будет перечислять содержимое настроенного рабочего каталога в контейнере.

docker exec подключит stdout и stderr в текущем сеансе терминала к stdout и stderr контейнера и выполните свою команду в среде контейнера.

Это хорошее решение для устранения неполадок и опробования. Но ищите альтернативы, если вы хотите навсегда изменить среду вашего приложения. Например, использование Dockerfile.

Если вы предоставите больше информации о вашем сценарии использования, я с удовольствием сделаю предложение.

...