0
点赞
收藏
分享

微信扫一扫

dockerfile Step 6/14 : RUN /usr/sbin/sshd -D 卡住

科牛 2023-08-02 阅读 57

如何实现"Dockerfile Step 6/14: RUN /usr/sbin/sshd -D 卡住"

作为一名经验丰富的开发者,我很高兴能够帮助一位刚入行的小白完成这个任务。在开始之前,让我们先来了解整个过程的步骤。下面是一个简单的表格,展示了实现这个任务的步骤:

步骤 描述
Step 1/14 FROM指令:指定基础镜像
Step 2/14 ENV指令:设置环境变量
Step 3/14 RUN指令:运行命令
Step 4/14 WORKDIR指令:设置工作目录
Step 5/14 COPY指令:复制文件
Step 6/14 RUN指令:运行命令
Step 7/14 EXPOSE指令:暴露端口
Step 8/14 VOLUME指令:创建挂载点
Step 9/14 CMD指令:容器启动时执行命令
Step 10/14 CMD指令:容器启动时执行命令
Step 11/14 CMD指令:容器启动时执行命令
Step 12/14 CMD指令:容器启动时执行命令
Step 13/14 CMD指令:容器启动时执行命令
Step 14/14 CMD指令:容器启动时执行命令

现在让我们来详细讨论每个步骤所需要做的事情,以及相应的代码和注释。

Step 1/14: FROM指令

首先,我们需要指定基础镜像,用于构建我们的Docker镜像。例如,我们可以选择使用Ubuntu 18.04作为我们的基础镜像。

FROM ubuntu:18.04

Step 2/14: ENV指令

接下来,我们需要设置环境变量。这些环境变量可以在构建和运行过程中使用。在这个例子中,我们可以设置一个环境变量来指定ssh的端口号。

ENV SSH_PORT 22

Step 3/14: RUN指令

然后,我们需要运行一些命令。在我们的例子中,我们需要安装OpenSSH服务器。

RUN apt-get update && apt-get install -y openssh-server

Step 4/14: WORKDIR指令

接下来,我们需要设置工作目录。这个目录将被用作后续命令的工作目录。我们可以选择在根目录下创建一个名为/app的目录。

WORKDIR /app

Step 5/14: COPY指令

然后,我们需要复制文件到容器中。在这个例子中,我们可以将一个名为authorized_keys的文件复制到容器中。

COPY authorized_keys /app/authorized_keys

Step 6/14: RUN指令

在这一步中,我们需要运行一个命令来启动ssh服务。然而,问题所在就是当运行这个命令时,它会卡住并阻塞容器的进程。这是因为/usr/sbin/sshd -D命令会以前台模式启动,并且需要一个终端与之交互。为了解决这个问题,我们需要修改命令,使其以后台模式运行。我们可以使用-D参数将其改为以守护进程模式运行。

RUN /usr/sbin/sshd -D

注意:这里的问题是由于在RUN指令中启动ssh服务时,以前台模式运行的命令阻塞了Docker构建过程。为了解决这个问题,我们可以在容器启动时使用容器的CMD指令来启动ssh服务。

Step 7/14: EXPOSE指令

接下来,我们需要暴露一个端口,以便我们可以从主机访问容器内的应用程序。

举报
0 条评论