关于使用docker安装的nginx做端口转发 go端口会被占用问题

1. 运行环境

docker + go build 编译后的可执行文件

2. 问题描述?

现在的问题是我使用了docker安装了nginx(容器内),可执行文件在主机,所以直接配置会存在问题(因为容器内端口没有作用),尝试使用配置映射端口的方式,但结果会因为端口被绑定,导致可执行文件无法运行。

容器[nginx(80)->端口8080(无运行程序)] ≠ 主机[可执行文件 (端口8080)]

3. 您期望得到的结果?

不考虑将可执行文件放入容器内解决。也不借助其他工具的情况下有办法直接实现将容器内的端口转发,转发至主机上的可执行文件。

核心就是容器的nginx可以代理主机的可执行文件即可。

容器[nginx(80)->端口8080] ===(某种方式映射)===主机[可执行文件 (端口8080)]

4. 您实际得到的结果?

暂时会因端口占用而无法实现,有其他方案能解决(可执行文件放入容器/再通过加多一次转发代理完成),只是看有没有更好的方法学习一下。

嘉宝君
讨论数量: 5

nginx容器网络改成host

1年前 评论
嘉宝君 (楼主) 1年前
cevin (作者) 1年前

nginx内设置go服务地址为真机IP:8080即可

1年前 评论
嘉宝君

谢谢两位的回答

经过的半天查阅资料和学习 确实直接在nginx使用ip:port即可

但和我理想还是有点差距 最好的方式希望通过配置docker实现容器使用宿主机的服务

最终找到最佳方案到可以在docker-compose.yml 中加入

...
    extra_hosts:
      - "host.docker.internal:host-gateway"  #容器内访问宿主机的资源 注:Docker v 20.10 以上
...

还可以修改network的模式等方式

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!