在 Alpine 上 运行 Apache 后 SSH docker 容器问题

SSH docker container issue after running Apache on Alpine

我在与 docker 容器的 SSH 会话中遇到问题。 实际上无法执行任何命令,因为 运行 进程从未让我在终端上动手,请参阅输出:

[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 在 Alpine 上安装 Apache 并结束:

ENTRYPOINT [ "/opt/entrypoint.sh" ]

entrypoint.sh:

/usr/sbin/httpd -D FOREGROUND

有什么提示可以让我的 SSH 会话正常工作并帮助我执行其他命令吗?谢谢。

容器范式不提倡使用诸如 ssh 服务器之类的东西。核心概念是您只在容器内托管一个独立的进程,在您的情况下 'httpd'.

换句话说,apache 容器内没有 ssh 服务器 运行,它只是托管 Web 服务器进程。

你可以使用像docker exec <container_name> <command>这样的命令在同一个容器中执行另一个进程。例如:

docker exec myhttpd ls -la

这将列出容器中配置的工作目录的内容。

docker exec会将你当前终端会话中的stdout和stderr连接到容器的stdout和stderr,并在容器的环境中执行你的命令。

这是解决问题和尝试的好方法。但是,如果您正在寻求永久更改包含的应用程序的环境,请寻找替代方案。比如使用Dockerfile.

如果您提供更多关于您的用例的信息,我很乐意提出建议。

实际上将命令从我的 dockerfile 移动到我的托管服务提供商提供的 procfile 解决了这个问题。 此更改后的 Dockerfile:

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

并将最后一条指令移至 Procfile。在此更改之后,该进程将成为从我的容器发布的服务,而不是每次构建或重新启动映像时都会执行的入口点。