gpt4 book ai didi

当tomcat服务停止时,Docker不会释放容器内的端口

转载 作者:行者123 更新时间:2023-12-02 19:38:48 24 4
gpt4 key购买 nike

我正在用下面的 docker 文件构建一个 docker 镜像,基本镜像已经安装了一个 tomcat。

#RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:temp1234' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

EXPOSE 22
EXPOSE 80
EXPOSE 443

CMD ["/usr/sbin/sshd", "-D"]
CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out

但是,当我尝试运行此容器时,它会失败并出现以下错误
    ubuntu@ip-172-16-27-205:~/docker-work$ sudo docker run -p 2222:22 -p 443:443 -p 80:80 d7d7f93692d7

* Starting Tomcat servlet engine tomcat7
...fail!

在检查容器内部时,发现端口已在使用中。
root@xxxxbd879:/var/log/tomcat7# sudo netstat -plntu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1/sshd
tcp6 0 0 :::1024 :::* LISTEN -
tcp6 0 0 :::44546 :::* LISTEN -
tcp6 0 0 127.0.0.1:8005 :::* LISTEN -
tcp6 0 0 :::47342 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN 1/sshd
tcp6 0 0 :::443 :::* LISTEN -

我不确定这些端口是如何被占用的。

在容器内,我也无法重新启动 tomcat 的服务
它因端口绑定(bind)异常而失败。

我想杀死 P-ID 并启动 tomcat 服务,但是 netstat 输出没有给出进程的 P-ID。

请建议我如何在这个容器上启动 tomcat 服务

最佳答案

所以问题是由于 CMD 尝试将 tomcat 作为服务启动(顺便说一下,请注意 Dockerfile 仅运行最后一个 CMD,在您的示例中,您有两条 CMD 行)。
无论如何,尝试添加脚本运行.sh 有这个内容

#!/bin/bash
/etc/init.d/tomcat7 start
exec tail -f /var/lib/tomcat7/logs/catalina.out

并更改您的 Dockerfile 以复制 run.sh 并为其授予执行权限。然后更改 CMS 行以执行 run.sh(您也可以在其中添加命令以启动 sshd)。
COPY run.sh /root/run.sh
RUN chmod +x /root/run.sh
CMD ["/root/run.sh"]

关于当tomcat服务停止时,Docker不会释放容器内的端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41116302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com