Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链接到其他容器的Docker容器内的Apache HTTP ProxyPass:链接容器解释的远程IP错误_Apache_Docker_Coreos - Fatal编程技术网

链接到其他容器的Docker容器内的Apache HTTP ProxyPass:链接容器解释的远程IP错误

链接到其他容器的Docker容器内的Apache HTTP ProxyPass:链接容器解释的远程IP错误,apache,docker,coreos,Apache,Docker,Coreos,我正在将Apache配置从基于普通主机的Ubuntu迁移到基于容器的CoreOS我只有一个CoreOS实例用于探索目的和个人使用,因此我并不需要云基础设施兼容的解决方案来完成这项任务假设所有容器都在同一台物理机器上运行。 该Apache配置是一个虚拟主机ProxyPass。在主机上安装了Apache且没有Docker的Ubuntu上,一切都很好。目标是在同一台机器上承载多个web服务,每个web服务位于端口443上自己的子域上 例如,我目前在CoreOS安装中有: example.com(网站

我正在将Apache配置从基于普通主机的Ubuntu迁移到基于容器的CoreOS我只有一个CoreOS实例用于探索目的和个人使用,因此我并不需要云基础设施兼容的解决方案来完成这项任务假设所有容器都在同一台物理机器上运行。

该Apache配置是一个虚拟主机ProxyPass。在主机上安装了Apache且没有Docker的Ubuntu上,一切都很好。目标是在同一台机器上承载多个web服务,每个web服务位于端口443上自己的子域上

例如,我目前在CoreOS安装中有:

  • example.com(网站)
  • gitlab.example.com(gitlab)
  • jenkins.example.com(jenkins)
  • sonar.example.com(声纳)
  • monitoring.app.example.com(python)
  • event.api.example.com(java)
  • legacy.api.example.com(php)
这些web服务中的每一个都在单独的容器中运行,并且它们的端口未发布(不能从Internet访问)。至于Apache,它在自己的容器上运行,其端口是公开的

我使用容器链接来实现虚拟主机到代理传递的行为:
--link gitlab:gitlab\
ProxyPass/https://gitlab:443/

我现在面临一个问题:如果我查看Apache日志,我可以看到传入连接使用预期的客户端IP地址进行日志记录。但是,目标容器看到的记录的传入连接是容器的IP地址,即
172.17.0.1

由于目标容器web服务(gitlab、python、java、php…)的多样性,我无法调整这些web服务的实现,以便它们从另一个位置选择IP,比如说
X-Forwarded-For

如果目标容器没有在Docker中运行,那么有什么方法可以让它们看到所需的IP地址?只要实现了所需的用例(端口443向Internet公开:一个域->一个Web服务,保留客户端IP),我愿意接受涉及丢弃Apache HTTP的解决方案


请注意,我无法在Apache服务器上使用
--net=host
,因为此选项与容器链接不兼容。

链接是正在逐步淘汰的传统技术,但您是对的,容器共享主机网络无法连接到任何其他网络类型

# docker network connect bridge container
Error response from daemon: Container sharing network namespace with another container or host cannot be connected to any other network
用于将apache连接到外部网络。在网桥网络中放置apache和所有其他容器以提供内部连接


请注意,一旦“实验性”构建出来,您应该使用哪一个来代替管道。

--net=host与--link不兼容,您使用的docker版本是什么on@Shibashis“来自守护程序的错误响应:冲突选项:--net=host无法与链接一起使用。这将导致未定义的行为”“Docker版本1.9.1,内部版本9894698“我只是想告诉你,我已经确认了你的答案,但我还没有尝试。我尝试过,但似乎对解决问题没有帮助,但我还是很感激,因为答案的内容帮助我确定了研究目标并找到了更多的文档。干杯!如果您提供一些详细信息,我们可能会找到问题所在。