ACCA225 commited on
Commit
06112bf
·
verified ·
1 Parent(s): 7d24efc

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +33 -17
Dockerfile CHANGED
@@ -5,7 +5,7 @@ FROM nvidia/cuda:12.5.1-cudnn-devel-ubuntu20.04
5
  ENV DEBIAN_FRONTEND=noninteractive \
6
  TZ=Europe/Paris
7
 
8
- # 安装基础工具
9
  RUN rm -f /etc/apt/sources.list.d/*.list && \
10
  apt-get update && apt-get install -y --no-install-recommends \
11
  curl \
@@ -24,6 +24,8 @@ RUN rm -f /etc/apt/sources.list.d/*.list && \
24
  build-essential \
25
  libsndfile-dev \
26
  software-properties-common \
 
 
27
  && rm -rf /var/lib/apt/lists/*
28
 
29
  # 安装 nvtop
@@ -49,33 +51,46 @@ RUN curl -sLo ~/miniconda.sh https://repo.continuum.io/miniconda/Miniconda3-py39
49
  ENV HOME=/root
50
  WORKDIR $HOME/app
51
 
52
- # 安装用户定义的 Debian 包
53
  RUN --mount=target=/root/packages.txt,source=packages.txt \
54
  apt-get update && \
55
  xargs -r -a /root/packages.txt apt-get install -y --no-install-recommends \
56
  && rm -rf /var/lib/apt/lists/*
57
-
58
- # 运行用户定义的启动脚本
59
  RUN --mount=target=/root/on_startup.sh,source=on_startup.sh,readwrite \
60
  bash /root/on_startup.sh
61
-
62
- # 创建数据目录
63
  RUN mkdir /data
64
-
65
- # 安装 Python 依赖包
66
  RUN --mount=target=requirements.txt,source=requirements.txt \
67
  pip install --no-cache-dir --upgrade -r requirements.txt
68
 
69
- # 复制当前目录内容到容器中 (这里包含了 start_server.sh)
70
- # --- 只保留这一次 COPY ---
 
71
  COPY . $HOME/app
72
 
73
- # --- 关键修复步骤,紧跟在COPY之后 ---
74
- # start_server.sh 添加执行权限
75
- # 因为 WORKDIR 已经是 $HOME/app,所以可以直接用相对路径
76
- RUN chmod +x start_server.sh
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
 
78
- # 复制自定义登录页(注意路径已更改为新的 conda site-packages 路径)
 
79
  COPY login.html /opt/conda/lib/python3.9/site-packages/jupyter_server/templates/login.html
80
 
81
  # 设置环境变量
@@ -87,5 +102,6 @@ ENV PYTHONUNBUFFERED=1 \
87
  SYSTEM=spaces \
88
  SHELL=/bin/bash
89
 
90
- # 定义容器启动命令
91
- CMD ["./start_server.sh"]
 
 
5
  ENV DEBIAN_FRONTEND=noninteractive \
6
  TZ=Europe/Paris
7
 
8
+ # 安装基础工具,并额外安装 dos2unix 和 mount 工具集
9
  RUN rm -f /etc/apt/sources.list.d/*.list && \
10
  apt-get update && apt-get install -y --no-install-recommends \
11
  curl \
 
24
  build-essential \
25
  libsndfile-dev \
26
  software-properties-common \
27
+ dos2unix \
28
+ mount \
29
  && rm -rf /var/lib/apt/lists/*
30
 
31
  # 安装 nvtop
 
51
  ENV HOME=/root
52
  WORKDIR $HOME/app
53
 
54
+ # 保留您原有的、完整的root执行部分
55
  RUN --mount=target=/root/packages.txt,source=packages.txt \
56
  apt-get update && \
57
  xargs -r -a /root/packages.txt apt-get install -y --no-install-recommends \
58
  && rm -rf /var/lib/apt/lists/*
 
 
59
  RUN --mount=target=/root/on_startup.sh,source=on_startup.sh,readwrite \
60
  bash /root/on_startup.sh
 
 
61
  RUN mkdir /data
 
 
62
  RUN --mount=target=requirements.txt,source=requirements.txt \
63
  pip install --no-cache-dir --upgrade -r requirements.txt
64
 
65
+ # --- 核心调试与修复区域 ---
66
+
67
+ # 1. 复制所有文件
68
  COPY . $HOME/app
69
 
70
+ # 2. 【调试步骤一】检查刚复制进来的文件权限和内容,绝不省略!
71
+ RUN echo "--- [DEBUG] 步骤1:检查 COPY 后的文件状态 ---" && \
72
+ ls -la $HOME/app && \
73
+ echo "--- [DEBUG] 检查 start_server.sh 的文件类型和换行符 ---" && \
74
+ file $HOME/app/start_server.sh && \
75
+ head -n 1 $HOME/app/start_server.sh | cat -A
76
+
77
+ # 3. 修复潜在的换行符问题,并强制赋予执行权限(作为最佳实践)
78
+ RUN echo "--- [FIX] 步骤2:修复换行符并设置执行权限 ---" && \
79
+ dos2unix $HOME/app/start_server.sh && \
80
+ chmod +x $HOME/app/start_server.sh
81
+
82
+ # 4. 【调试步骤二】再次检查权限,确认 chmod 生效
83
+ RUN echo "--- [DEBUG] 步骤3:最终确认文件权限 ---" && \
84
+ ls -la $HOME/app
85
+
86
+ # 5. 【调试步骤三】检查文件系统的挂载选项,排查 noexec 问题
87
+ RUN echo "--- [DEBUG] 步骤4:检查 /root/app 的挂载选项 ---" && \
88
+ mount | grep " /"
89
+
90
+ # --- 调试结束 ---
91
 
92
+ # (可选) 复制自定义登录页
93
+ # 如果你没有这个文件,可以注释掉下面这行
94
  COPY login.html /opt/conda/lib/python3.9/site-packages/jupyter_server/templates/login.html
95
 
96
  # 设置环境变量
 
102
  SYSTEM=spaces \
103
  SHELL=/bin/bash
104
 
105
+ # --- 最终执行方案:使用 bash 解释器直接执行 ---
106
+ # 这是最可靠的方法,因为它不要求脚本文件本身有执行权限,只需要读权限。
107
+ CMD ["/bin/bash", "./start_server.sh"]