【问题标题】:How to add Nginx reverse proxy to existing image如何将 Nginx 反向代理添加到现有图像
【发布时间】:2021-04-15 04:08:54
【问题描述】:

如何将 nginx 反向代理添加到现有图像?

例如,我使用https://github.com/Koenkk/zigbee2mqtt,这会暴露一个只能通过 http 工作的前端。

我想使用图像,但前端只能通过 https 访问。添加 Nginx 反向代理很简单,但最好的方法是什么?

我是 fork 存储库并将 Nginx 和配置添加到构建中,还是基于现有映像创建一个新映像?

如果我根据现有图像创建一个新图像,那么入口点基本上会丢失,因此在该脚本中完成的任何设置都需要在我的图像中复制?

编辑:我需要在 macvlan 网络上运行此容器,但我不希望该网络上的其他设备可以使用不安全的 http 访问。

【问题讨论】:

  • 您几乎总是在单独的容器中运行它。您可以使用未修改的nginx 映像并将配置文件安装到其中。
  • 但是通过将其添加到单独的容器中,这意味着原始容器仍然需要暴露不安全的端口,以便代理可以访问它。
  • 您不必在隔离的 Docker 网络空间之外发布端口。
  • 我稍后会更新这个问题,但目前我的家庭自动化容器与其他一些物联网设备一起在 macvlan 网络上运行。我在 Unraid 服务器上运行 docker,这是目前我可以让容器在指定的 vlan 上运行的唯一方法(直到我获得第二个 NIC)
  • 用两个镜像创建 docker-compose,一个是 ZigBee,另一个是你的 Nginx 转发所有请求。为什么要通过 ZigBee 使用 SSL?

标签: docker nginx


【解决方案1】:

在这个特定的图像中,有一个入口点,我发现这样做的最佳方法是在运行它时覆盖入口点。

原来的入口点是/usr/local/bin/docker-entrypoint.sh,CMD 是npm start

经过一番修改(因为我仍然无法完全理解入口点和 CMD 的组合),我创建了以下脚本,如果它尚未安装,则安装 nginx 以及运行原始入口点和 CMD

脚本和配置位于一个卷上,因此这会在映像的不同实例中持续存在。

#!/bin/sh
echo "Hello"
. /usr/local/bin/docker-entrypoint.sh

if [[ `apk -e info nginx | wc -l ` -eq 0 ]]
then
  apk add nginx
  cd /etc/nginx/conf.d
  mv default.conf default.conf.disabled
  ln -s /app/data/nginx.conf nginx.conf
  mkdir /run/nginx
  echo "Installed Nginx"
fi

echo "Starting Nginx"
nginx &

npm init -y

echo "Starting Node"
npm start

不确定这是可取的还是最好的方法,但它似乎工作得相当好。

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2014-10-01
    相关资源
    最近更新 更多