繁体   English   中英

在 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" ]

入口点.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。 在此更改之后,进程将是从我的容器发布的服务,而不是每次构建或重新启动映像时都会执行的入口点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM