1. 拉取镜像
1 2 3
| docker pull nginx:1.10
mkdir -p /opt/module/docker-fileserver/{conf,html,logs,files}
|
2. 配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| vi /opt/module/docker-fileserver/conf/nginx.html
user nginx; worker_processes auto;
error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;
events { worker_connections 1024; }
http { include /etc/nginx/mime.types; default_type application/octet-stream;
# 自定义日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on; keepalive_timeout 65;
# 文件服务器配置 server { listen 80; server_name localhost;
# 文件下载路径(指向宿主机 files 目录) location /files { alias /usr/share/nginx/files; autoindex on; # 启用目录列表 autoindex_exact_size off; # 显示文件大小(KB/MB) autoindex_localtime on; # 显示本地时间 charset utf-8; # 避免中文乱码 }
# 自定义下载页面(指向宿主机 html 目录) location / { root /usr/share/nginx/html; index index.html; charset utf-8; # 避免中文乱码 } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
| vi /opt/module/docker-fileserver/html/index.html
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>文件下载中心</title> <style> * { box-sizing: border-box; margin: 0; padding: 0; font-family: 'Segoe UI', 'Microsoft YaHei', sans-serif; } body { background-color: #f5f7fa; color: #333; line-height: 1.6; padding: 20px; max-width: 1200px; margin: 0 auto; } header { text-align: center; padding: 30px 0; border-bottom: 1px solid #e1e4e8; margin-bottom: 30px; } h1 { color: #2c3e50; font-size: 2.5rem; margin-bottom: 10px; } .description { color: #7f8c8d; font-size: 1.1rem; max-width: 800px; margin: 0 auto; } .card { background: white; border-radius: 10px; box-shadow: 0 5px 15px rgba(0,0,0,0.05); padding: 25px; margin-bottom: 30px; } .card h2 { color: #3498db; margin-bottom: 15px; padding-bottom: 10px; border-bottom: 2px solid #f0f3f5; } .file-access { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 20px; } .access-box { flex: 1; min-width: 300px; background: #f8f9fa; border-radius: 8px; padding: 20px; border-left: 4px solid #3498db; } .access-box h3 { margin-bottom: 10px; color: #2c3e50; } .path { background: #e3f2fd; padding: 8px 15px; border-radius: 5px; font-family: monospace; word-break: break-all; margin: 10px 0; } .btn { display: inline-block; background: #3498db; color: white; padding: 10px 20px; border-radius: 5px; text-decoration: none; font-weight: bold; margin-top: 10px; transition: all 0.3s ease; } .btn:hover { background: #2980b9; transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0,0,0,0.1); } .instructions { margin-top: 30px; } .instructions li { margin-bottom: 10px; padding-left: 20px; position: relative; } .instructions li:before { content: "•"; color: #3498db; position: absolute; left: 0; font-weight: bold; } footer { text-align: center; margin-top: 50px; color: #7f8c8d; padding: 20px 0; border-top: 1px solid #e1e4e8; } @media (max-width: 768px) { .file-access { flex-direction: column; } h1 { font-size: 2rem; } } </style> </head> <body> <header> <h1>文件下载中心</h1> <p class="description">安全、高效的文件共享服务,支持直接下载和目录浏览</p> </header>
<main> <div class="card"> <h2>文件访问</h2> <div class="file-access"> <div class="access-box"> <h3>文件目录</h3> <p>浏览所有可用文件:</p> <div class="path">/files</div> <a href="/files" class="btn">浏览文件列表</a> </div> <div class="access-box"> <h3>直接下载</h3> <p>使用完整路径直接下载:</p> <div class="path">/files/文件名</div> <a href="/files" class="btn">查看示例</a> </div> </div> </div> <div class="card"> <h2>使用说明</h2> <ul class="instructions"> <li>上传文件到服务器 <code>/opt/module/docker-fileserver/files</code> 目录</li> <li>文件将自动出现在文件列表中</li> <li>点击文件名可直接下载</li> <li>支持中文文件名和大型文件下载</li> <li>当前服务端口:<strong>8888</strong></li> </ul> </div> </main>
<footer> <p>© 2023 文件共享服务 | 由 Nginx 提供支持 | 版本 1.10</p> <p>服务器: 192.168.100.38:8888</p> </footer> </body> </html>
|
3. 启动
1 2 3 4 5 6 7 8 9
| docker run -d \ --name docker-fileserver \ --restart=always \ -p 8888:80 \ -v /opt/module/docker-fileserver/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /opt/module/docker-fileserver/html:/usr/share/nginx/html \ -v /opt/module/docker-fileserver/logs:/var/log/nginx \ -v /opt/module/docker-fileserver/files:/usr/share/nginx/files \ nginx:1.10
|
4. 使用
http://192.168.100.38:8888/files/

1 2 3 4 5 6 7 8 9 10
| [root@localhost software] --2025-08-06 22:53:05-- http://192.168.100.38:8888/files/jdk-8u144-linux-x64.tar.gz 正在连接 192.168.100.38:8888... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:185515842 (177M) [application/octet-stream] 正在保存至: “jdk-8u144-linux-x64.tar.gz”
100%[========================================================================================================================================>] 185,515,842 328MB/s 用时 0.5s
2025-08-06 22:53:06 (328 MB/s) - 已保存 “jdk-8u144-linux-x64.tar.gz” [185515842/185515842])
|