在 Docker 中配置 CentOS 时遇到问题

问题描述 投票:0回答:1

我使用 Dockerfile 配置了 CentOS,我打算利用 CMD ["/usr/sbin/sshd", "-D"] 使 SSH 服务在每次容器启动时自动启动。但是,在我执行 docker run 后,它卡住了这是我的 dockerfile。

FROM centos:7.9.2009
 
# 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no  
RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
#安装openssh-clients
RUN yum install -y openssh-clients
#安装epel-release
RUN yum install -y epel-release
#安装net-tools
RUN yum install -y net-tools
#安装vim
RUN yum install -y vim


# # 添加测试用户root,密码,并且将此用户添加到sudoers里  
RUN echo "root:310013" | chpasswd
RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ecdsa -b 256 -f /etc/ssh/ssh_host_ecdsa_key
RUN ssh-keygen -t ed25519 -b 256 -f /etc/ssh/ssh_host_ed25519_key

# 启动sshd服务并且暴露22端口  
RUN mkdir /var/run/sshd
EXPOSE 22

# 每次开机自启动sshd都会卡死,为什么?
CMD ["/usr/sbin/sshd", "-D"]

ADD jdk-8u401-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_401 /usr/local/jdk1.8
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH

ADD hadoop-3.3.6-src.tar.gz /usr/local
RUN mv /usr/local/hadoop-3.3.6-src /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH


Problem's Img

我尝试删除 Dockerfile 中的这一行并在容器内手动执行 /usr/sbin/sshd -d 命令,没有发现任何问题。

docker hadoop ssh dockerfile
1个回答
0
投票

使用与 CentOS / Red Hat Enterprise Linux 不兼容的某些配置运行 SSH 服务器(sshd)时会发生此错误,这里是

UsePAM no
指令。解决方法是在运行
sshd
之前在 Dockerfile 中添加一个步骤,以在
/etc/ssh/sshd_config
文件中注释此指令。

示例:

# 每次开机自启动sshd都会卡死,为什么?
RUN sed -i 's/^UsePAM no$/#UsePAM no/g' /etc/ssh/sshd_config
CMD ["/usr/sbin/sshd", "-D"]
© www.soinside.com 2019 - 2024. All rights reserved.