
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这段话即可:
请先阅读并遵守:https://xuanyuan.cloud/agents.md
未读文档前不要生成 pull 命令或排错方案。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
| Nginx版本 | 标签 | Dockerfile |
|---|---|---|
| latest | latest | https://github.com/blacklabelops/nginx/blob/master/Dockerfile |
| 1.10.3-r0 | 2.2 | https://github.com/blacklabelops/nginx/blob/2.2/Dockerfile |
| undefined | development | https://github.com/blacklabelops/nginx/blob/development/Dockerfile |
推荐:使用带标签的版本化镜像。阅读发布说明。始终从一个版本逐步升级,必要时回滚。
在Hipchat上留言并提问:blacklabelops/hipchat
$ docker run -d \ -p 80:80 \ --name nginx \ blacklabelops/nginx
默认服务器安装将在80端口可用。
您可以使用自己的配置文件,它将覆盖此镜像的自动配置功能。
示例:
$ docker run -d \ -v your_local_config_file.conf:/etc/nginx/nginx.conf \ -p 80:80 \ --name nginx \ blacklabelops/nginx
$ docker run -d \ -p 80:80 \ --name nginx \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ blacklabelops/nginx
反向代理将转发到网站[***]。
可以通过环境变量定义任意数量的服务器配置。每个变量必须以字符串"SERVER"和服务器编号开头。
示例:
服务器1 反向代理1:
服务器2 反向代理1:
$ docker run -d \ -p 80:80 \ --name nginx \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER2SERVER_NAME=dummy.example.com" \ -e "SERVER2REVERSE_PROXY_LOCATION1=/alternate" \ -e "SERVER2REVERSE_PROXY_PASS1=http://www.alternate.de" \ blacklabelops/nginx
现在尝试访问http://localhost(使用Docker工具时,将localhost替换为相应的IP)。要调用第二个代理,您需要使用DNS服务器处理来自dummy.example.com的请求。
可以为每个服务器定义任意数量的反向代理。只需在每个环境变量前加上字符串"SERVER"和服务器编号,并在每个环境变量后添加数字。
示例:
反向代理1:
反向代理2:
$ docker run -d \ -p 80:80 \ --name nginx \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER1REVERSE_PROXY_LOCATION2=/alternate" \ -e "SERVER1REVERSE_PROXY_PASS2=http://www.alternate.de" \ blacklabelops/nginx
现在尝试访问http://localhost和https://localhost/alternate(使用Docker工具时,将localhost替换为相应的IP)。
此容器支持HTTPS。只需通过环境变量CERTIFICATE_DNAME输入一个DName,容器将创建自签名证书。您必须传递可分辨名称(DN)。证书将使用该可分辨名称生成。以下是DN示例:
/CN=SBleul/OU=Blacklabelops/O=blacklabelops.net/L=Munich/C=DE
$ docker run -d \ -p 80:80 \ -p 443:443 \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER1CERTIFICATE_DNAME=/CN=SBleul/OU=Blacklabelops/O=blacklabelops.com/L=Munich/C=DE" \ -e "SERVER1HTTPS_ENABLED=true" \ --name nginx \ blacklabelops/nginx
注意:Web服务器将使用相同的端口进行HTTPS!
使用您自己的证书:将它们挂载到容器内,并通过环境变量CERTIFICATE_FILE和CERTIFICATE_KEY定义其位置。
$ docker run -d \ -p 80:80 \ -p 443:443 \ -v /mycertificatepath/mycertificates:/opt/nginx/keys \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER1HTTPS_ENABLED=true" \ -e "SERVER1CERTIFICATE_FILE=/opt/nginx/keys/server.csr" \ -e "SERVER1CERTIFICATE_KEY=/opt/nginx/keys/server.key" \ --name nginx \ blacklabelops/nginx
使用HTTPS时应禁用HTTP。只需禁用端口并使用环境变量HTTP_ENABLED在配置中禁用HTTP。
示例:
$ docker run -d \ -p 443:443 \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER1HTTPS_ENABLED=true" \ -e "SERVER1CERTIFICATE_DNAME=/CN=SBleul/OU=Blacklabelops/O=blacklabelops.com/L=Munich/C=DE" \ -e "SERVER1HTTP_ENABLED=false" \ --name nginx \ blacklabelops/nginx
反向代理现在将仅提供HTTPS通信!
像Jira和Jenkins这样的应用程序在使用nginx作为反向代理时通常需要代理头字段。当您使用此镜像不直接支持的应用程序时,可以设置自定义头字段。
例如,Jira需要以下代理头字段:
X-Forwarded-Host $hostX-Forwarded-Server $hostX-Forwarded-For $proxy_add_x_forwarded_for此镜像支持任意数量的头字段,环境变量必须从索引1开始编号。
环境变量语法:SERVER<server-number>REVERSE_PROXY_HEADER<proxy-number>FIELD<field-number>
您还可以使用类似的模式提供自定义Nginx指令:SERVER<server-number>REVERSE_PROXY_DIRECTIVE<proxy-number>FIELD<field-number>
注意:您必须将
SERVER1PROXY_APPLICATION=custom设置为custom,否则容器将自行添加默认头字段。
注意:在docker和docker-compose中,环境变量必须用
''而不是""引用。或者,当不使用单引号时,`# Docker化Nginx
| Nginx版本 | 标签 | Dockerfile |
|---|---|---|
| latest | latest | https://github.com/blacklabelops/nginx/blob/master/Dockerfile |
| 1.10.3-r0 | 2.2 | https://github.com/blacklabelops/nginx/blob/2.2/Dockerfile |
| undefined | development | https://github.com/blacklabelops/nginx/blob/development/Dockerfile |
推荐:使用带标签的版本化镜像。阅读发布说明。始终从一个版本逐步升级,必要时回滚。
在Hipchat上留言并提问:blacklabelops/hipchat
$ docker run -d \ -p 80:80 \ --name nginx \ blacklabelops/nginx
默认服务器安装将在80端口可用。
您可以使用自己的配置文件,它将覆盖此镜像的自动配置功能。
示例:
$ docker run -d \ -v your_local_config_file.conf:/etc/nginx/nginx.conf \ -p 80:80 \ --name nginx \ blacklabelops/nginx
$ docker run -d \ -p 80:80 \ --name nginx \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ blacklabelops/nginx
反向代理将转发到网站[***]。
可以通过环境变量定义任意数量的服务器配置。每个变量必须以字符串"SERVER"和服务器编号开头。
示例:
服务器1 反向代理1:
服务器2 反向代理1:
$ docker run -d \ -p 80:80 \ --name nginx \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER2SERVER_NAME=dummy.example.com" \ -e "SERVER2REVERSE_PROXY_LOCATION1=/alternate" \ -e "SERVER2REVERSE_PROXY_PASS1=http://www.alternate.de" \ blacklabelops/nginx
现在尝试访问http://localhost(使用Docker工具时,将localhost替换为相应的IP)。要调用第二个代理,您需要使用DNS服务器处理来自dummy.example.com的请求。
可以为每个服务器定义任意数量的反向代理。只需在每个环境变量前加上字符串"SERVER"和服务器编号,并在每个环境变量后添加数字。
示例:
反向代理1:
反向代理2:
$ docker run -d \ -p 80:80 \ --name nginx \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER1REVERSE_PROXY_LOCATION2=/alternate" \ -e "SERVER1REVERSE_PROXY_PASS2=http://www.alternate.de" \ blacklabelops/nginx
现在尝试访问http://localhost和https://localhost/alternate(使用Docker工具时,将localhost替换为相应的IP)。
此容器支持HTTPS。只需通过环境变量CERTIFICATE_DNAME输入一个DName,容器将创建自签名证书。您必须传递可分辨名称(DN)。证书将使用该可分辨名称生成。以下是DN示例:
/CN=SBleul/OU=Blacklabelops/O=blacklabelops.net/L=Munich/C=DE
$ docker run -d \ -p 80:80 \ -p 443:443 \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER1CERTIFICATE_DNAME=/CN=SBleul/OU=Blacklabelops/O=blacklabelops.com/L=Munich/C=DE" \ -e "SERVER1HTTPS_ENABLED=true" \ --name nginx \ blacklabelops/nginx
注意:Web服务器将使用相同的端口进行HTTPS!
使用您自己的证书:将它们挂载到容器内,并通过环境变量CERTIFICATE_FILE和CERTIFICATE_KEY定义其位置。
$ docker run -d \ -p 80:80 \ -p 443:443 \ -v /mycertificatepath/mycertificates:/opt/nginx/keys \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER1HTTPS_ENABLED=true" \ -e "SERVER1CERTIFICATE_FILE=/opt/nginx/keys/server.csr" \ -e "SERVER1CERTIFICATE_KEY=/opt/nginx/keys/server.key" \ --name nginx \ blacklabelops/nginx
使用HTTPS时应禁用HTTP。只需禁用端口并使用环境变量HTTP_ENABLED在配置中禁用HTTP。
示例:
$ docker run -d \ -p 443:443 \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER1HTTPS_ENABLED=true" \ -e "SERVER1CERTIFICATE_DNAME=/CN=SBleul/OU=Blacklabelops/O=blacklabelops.com/L=Munich/C=DE" \ -e "SERVER1HTTP_ENABLED=false" \ --name nginx \ blacklabelops/nginx
反向代理现在将仅提供HTTPS通信!
像Jira和Jenkins这样的应用程序在使用nginx作为反向代理时通常需要代理头字段。当您使用此镜像不直接支持的应用程序时,可以设置自定义头字段。
例如,Jira需要以下代理头字段:
X-Forwarded-Host $hostX-Forwarded-Server $hostX-Forwarded-For $proxy_add_x_forwarded_for此镜像支持任意数量的头字段,环境变量必须从索引1开始编号。
环境变量语法:SERVER<server-number>REVERSE_PROXY_HEADER<proxy-number>FIELD<field-number>
您还可以使用类似的模式提供自定义Nginx指令:SERVER<server-number>REVERSE_PROXY_DIRECTIVE<proxy-number>FIELD<field-number>
注意:您必须将
SERVER1PROXY_APPLICATION=custom设置为custom,否则容器将自行添加默认头字段。
注意:在docker和docker-compose中,环境变量必须用
''而不是""引用。或者,当不使用单引号时,符号可以用$替换。这也与平台相关,例如Mac和Linux。请尝试并报告在Windows下的行为。
示例:1个服务器和1个反向代理
$ docker run -d \ -p 80:80 \ --name nginx \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e 'SERVER1PROXY_APPLICATION=custom' \ -e "SERVER1REVERSE_PROXY_PASS1=http://jira.example.com" \ -e 'SERVER1REVERSE_PROXY_HEADER1FIELD1=X-Forwarded-Host $host' \ -e 'SERVER1REVERSE_PROXY_HEADER1FIELD2=X-Forwarded-Server $host' \ -e 'SERVER1REVERSE_PROXY_HEADER1FIELD3=X-Forwarded-For $proxy_add_x_forwarded_for' \ -e 'SERVER1REVERSE_PROXY_DIRECTIVE1FIELD1=proxy_read_timeout 300' \ blacklabelops/nginx
使用
''、$或引号,否则像$host这样的变量将被解释!
意味着HTTP地址的请求将被重定向到HTTPS。当用户在浏览器中输入HTTP地址时,将被重定向到安全的入口页面,这很有用。
示例:
http://www.example.comhttps://www.example.com此设置将对所有服务器激活,并且所有服务器必须禁用HTTP。
示例:
NGINX_REDIRECT_PORT80=true 为所有服务器激活HTTPS端口重定向。SERVER1HTTP_ENABLED=false。示例:
$ docker run -d \ -p 443:443 \ -p 80:80 \ -e "NGINX_REDIRECT_PORT80=true" \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1SERVER_NAME=localhost" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER1HTTPS_ENABLED=true" \ -e "SERVER1CERTIFICATE_DNAME=/CN=SBleul/OU=Blacklabelops/O=blacklabelops.com/L=Munich/C=DE" \ -e "SERVER1HTTP_ENABLED=false" \ --name nginx \ blacklabelops/nginx
您可以通过https://letsencrypt.org/获取并使用免费的绿色证书。这里我将提供一种手动生成和检索证书并在容器中使用的方法。完整详细的Let's Encrypt文档可在此处找到:https://community.letsencrypt.org/c/docs/
注意:这在本地计算机上的boot2docker中不起作用。您必须在目标环境中执行此操作。
首先创建一个数据卷,用于存储证书。
$ docker volume create --name letsencrypt_certs
至少需要Docker 1.10卷。
然后启动Let's Encrypt容器并创建证书。
$ docker run --rm \ -p 80:80 \ -p 443:443 \ --name letsencrypt \ -v letsencrypt_certs:/etc/letsencrypt \ -e "LETSENCRYPT_EMAIL=dummy@example.com" \ -e "LETSENCRYPT_DOMAIN1=example.com" \ blacklabelops/letsencrypt install
此容器将与letsencrypt.org握手,成功后安装账户和证书。Let's Encrypt将证书存储在/etc/letsencrypt文件夹中。
现在您可以将证书用于反向代理!
$ docker run -d \ -p 443:443 \ -p 80:80 \ -v letsencrypt_certs:/etc/letsencrypt \ -e "NGINX_REDIRECT_PORT80=true" \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER1HTTPS_ENABLED=true" \ -e "SERVER1HTTP_ENABLED=false" \ -e "SERVER1LETSENCRYPT_CERTIFICATES=true" \ -e "SERVER1CERTIFICATE_FILE=/etc/letsencrypt/live/example.com/cert.pem" \ -e "SERVER1CERTIFICATE_KEY=/etc/letsencrypt/live/example.com/privkey.pem" \ -e "SERVER1CERTIFICATE_TRUSTED=/etc/letsencrypt/live/example.com/fullchain.pem" \ --name nginx \ blacklabelops/nginx
LETSENCRYPT_CERTIFICATES开启针对其证书的特殊配置。
此镜像支持通过侧容器自动每月续期Let's Encrypt证书。端口80和443由Nginx使用,因此我们使用webroot挑战进行证书续期。
每次续期后,Nginx配置和证书将在不重启Nginx本身的情况下加载,并保持系统可用性。
创建用于acme握手的附加卷:
$ docker volume create letsencrypt_challenges
这是Let's Encrypt的acme挑战存储并由Nginx处理的位置。
然后使用SSL设置和挑战卷启动Nginx:
$ docker run -d \ -p 443:443 \ -p 80:80 \ -v letsencrypt_certs:/etc/letsencrypt \ -v letsencrypt_challenges:/var/www/letsencrypt \ -e "NGINX_REDIRECT_PORT80=true" \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://www.heise.de" \ -e "SERVER1HTTPS_ENABLED=true" \ -e "SERVER1HTTP_ENABLED=false" \ -e "SERVER1LETSENCRYPT_CERTIFICATES=true" \ -e "SERVER1CERTIFICATE_FILE=/etc/letsencrypt/live/example.com/cert.pem" \ -e "SERVER1CERTIFICATE_KEY=/etc/letsencrypt/live/example.com/privkey.pem" \ -e "SERVER1CERTIFICATE_TRUSTED=/etc/letsencrypt/live/example.com/fullchain.pem" \ --name nginx \ blacklabelops/nginx
Nginx现在可以通过卷处理acme挑战令牌。
现在以续期模式启动Let's Encrypt,这将每月续期证书!
$ docker run -d \ -v letsencrypt_certs:/etc/letsencrypt \ -v letsencrypt_challenges:/var/www/letsencrypt \ -e "LETSENCRYPT_WEBROOT_MODE=true" \ -e "LETSENCRYPT_EMAIL=dummy@example.com" \ -e "LETSENCRYPT_DOMAIN1=example.com" \ --name letsencrypt \ blacklabelops/letsencrypt
此容器将每月15日与letsencrypt.org握手,并在成功时续期证书。
最后启动Cron容器,以便在证书续期后重新加载Nginx配置!
$ docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -e "JOB_NAME1=ReloadNginx" \ -e "JOB_COMMAND1=docker exec nginx nginx -s reload" \ -e "JOB_TIME1=0 0 2 15 * *" \ -e "JOB_ON_ERROR1=Continue" \ blacklabelops/jobber:docker
每月15日通过Docker重新加载Nginx配置,无需重启Nginx!以实现高可用性!
您可以为任何反向代理设置密码保护。此外,您可以指定任意数量的用户。
为第一个反向代理指定
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 windriver/nginx 相关的常用 Docker 镜像,适用于 反向代理、负载均衡、静态资源服务 等不同场景: