Docker容器在系统被修剪后继续运行

kyks70gy  于 2023-05-06  发布在  Docker
关注(0)|答案(1)|浏览(156)

昨天我发现一个容器仍然在我的机器上运行(macOS Monterey)。我在StackOverflow上寻找我的问题的答案,但我尝试的任何方法都不起作用。
我做了一个docker ps,然后是一个docker stop <container-ID>,但Web应用程序仍然在端口0.0.0.0:80中运行。
我不记得我什么时候运行这个容器,但它是在开发Dash Plotly应用程序期间。
在上面失败后,我尝试了:

docker system prune --all --force --volumes

它从我的系统中删除了所有容器和镜像(它确实起作用了,因为镜像确实从我的Docker Desktop列表中消失了)。
然后我重新启动了我的电脑,但Web应用程序仍然存在。
然后运行命令:

sudo lsof -i -P -n | grep 80

这给了我输出:

assistant  480       cconsta1   25u  IPv4 0x7f28d5520c917253      0t0    UDP *:*
Google     730       cconsta1   80u  IPv6 0x7f28d5520a8477c3      0t0    UDP *:5353
Google     730       cconsta1   89u  IPv6 0x7f28d5520a8480f3      0t0    UDP *:5353
Slack\x20 4259       cconsta1   23u  IPv4 0x7f28d54d343d66cb      0t0    TCP 192.168.10.1:51807->3.65.102.105:443 (ESTABLISHED)
Slack\x20 4259       cconsta1   26u  IPv4 0x7f28d54d339966cb      0t0    TCP 192.168.10.1:51809->3.65.102.105:443 (ESTABLISHED)
httpd     4418           root    4u  IPv6 0x7f28d53edaecb713      0t0    TCP *:80 (LISTEN)
httpd     4422           _www    4u  IPv6 0x7f28d53edaecb713      0t0    TCP *:80 (LISTEN)
httpd     4431           _www    4u  IPv6 0x7f28d53edaecb713      0t0    TCP *:80 (LISTEN)
httpd     4433           _www    4u  IPv6 0x7f28d53edaecb713      0t0    TCP *:80 (LISTEN)
httpd     4434           _www    4u  IPv6 0x7f28d53edaecb713      0t0    TCP *:80 (LISTEN)

我试图杀死这些进程,看看是否会有什么工作,sudo kill -9 <PID>,但也没有工作。
最后,我清除了浏览器的缓存,并检查了Web应用程序是否在隐私模式下运行,但它仍然可以工作。
我不记得我使用哪个Dockerfile来运行这个容器,但这个是最接近的:

FROM python:3.10

# EXPOSE 8050

WORKDIR /app

COPY . .
COPY models /app/models/

RUN pip install -r requirements.txt

EXPOSE 8050

CMD ["gunicorn", "-b", "0.0.0.0:8050", "--reload", "app:server"]

图像可能是使用以下方法构建的:

docker build -f Dockerfile -t app:latest .

并使用以下命令运行:

docker run -p 80:8050 app:latest

下面是requirements.txt文件:

numpy 
pandas 
plotly 
dash 
gunicorn  
dash-bootstrap-components
scikit-learn 
xgboost

app.py文件如下所示:

import time
import dash
import dash_bootstrap_components as dbc
import pickle
import numpy as np
import plotly.graph_objs as go
from dash import Input, Output, State, dcc, html
# import tensorflow as tf
# from tensorflow import keras
# from keras.models import load_model
#import xgboost
import re

app = dash.Dash(external_stylesheets=[
                dbc.themes.COSMO])

# Include the server option to become able to deploy online
server = app.server

# Code for the app

if __name__ == "__main__":
    app.run_server(debug=True, host="0.0.0.0",port="8050", use_reloader=True)
    #app.run_server(debug=True)

命令docker --version返回:

Docker version 20.10.24, build 297e128

编辑:我认为该图像实际上是使用restart always命令运行的:

docker run --restart always -p 80:8050 app:latest
8ehkhllq

8ehkhllq1#

经过大量的搜索,我第一次发现导致问题的服务是Apache服务器httpd。我列出了在端口80上运行的所有服务,使用以下命令:

sudo lsof -i :80

试图终止使用

sudo kill -9 <process_id>

我什么都没做,在使用

sudo pkill httpd

停止Web服务几秒钟,但随后又恢复了。我可以停止服务器使用:

sudo apachectl stop

为了防止它重新启动,我编辑了/etc/apache2/httpd.conf文件,并特别注解掉了这一行:

#LoadModule mpm_prefork_module

在做所有这些之前,我卸载并重新安装了Docker,但没有做任何事情。

相关问题