我正在尝试在Docker的容器之间建立连接.一个容器有PHP5-fpm,第二个是Nginx.

配置PHP5-fpm默认,只是几个更改:

listen = 9000

listen.allowed_clients =

和Nginx(/ etc / Nginx / sites-available / default):

server {
    listen 80 default_server;
    #listen [::]:80 default_server ipv6only=on;

    root /var/www/testing;
    index index.PHP

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
        try_files $uri $uri/ /index.PHP;
    }

    location ~ \.PHP${
        fastcgi_split_path_info ^(.+\.PHP)(/.+)$;
        # NOTE: You should have "cgi.fix_pathinfo = 0;" in PHP.ini

        #fastcgi_pass unix:/var/run/PHP5-fpm.sock;
        fastcgi_pass 192.168.1.2:9000;
        fastcgi_index index.PHP;
        include fastcgi_params;
    }

}

然后我尝试用https://github.com/jpetazzo/pipework创建连接,这就是为什么fastcgi_pass 192.168.1.2:9000;.I尝试使用IP直接从容器,但没有.

当我尝试用lynx打开页面时,我有BadGateway.

我尝试发布端口MASTER_PORT = $(sudo docker端口$MASTER_ID 9000),但没有…
ping没有问题.从Nginx Telnet到端口9000保持打开几秒钟,然后“连接关闭…”

谁能解释我在做错什么?
谢谢!

/编辑/
我尝试将fastcgi_pass更改为172.17.42.1:9000; (主机上docker0的地址),然后在主机上启动tcpdump:

tcpdump -i docker0端口9000

我有:

tcpdump: verbose output suppressed,use -v or -vv for full protocol decode
listening on docker0,link-type EN10MB (Ethernet),capture size 65535 bytes
10:24:54.529572 IP 172.17.0.20.40932 > 172.17.42.1.9000: Flags [S],seq 141160046,win 14600,options [mss 1460,sackOK,TS val 1235770 ecr 0,nop,wscale 7],length 0
10:24:54.529594 IP 172.17.42.1.9000 > 172.17.0.20.40932: Flags [S.],seq 2944341886,ack 141160047,win 14480,TS val 1235770 ecr 1235770,length 0
10:24:54.529605 IP 172.17.0.20.40932 > 172.17.42.1.9000: Flags [.],ack 1,win 115,options [nop,TS val 1235770 ecr 1235770],length 0
10:24:54.530324 IP 172.17.0.20.40932 > 172.17.42.1.9000: Flags [P.],seq 1:665,TS val 1235771 ecr 1235770],length 664
10:24:54.530387 IP 172.17.42.1.9000 > 172.17.0.20.40932: Flags [.],ack 665,win 124,TS val 1235771 ecr 1235771],length 0
10:24:54.530534 IP 172.17.42.1.44233 > 172.17.0.12.9000: Flags [S],seq 1354597292,TS val 1235771 ecr 0,length 0
10:24:54.530549 IP 172.17.0.12.9000 > 172.17.42.1.44233: Flags [R.],seq 0,ack 1354597293,win 0,length 0
10:24:54.531044 IP 172.17.42.1.9000 > 172.17.0.20.40932: Flags [R.],seq 1,length 0

因此,数据包在容器之间…但为什么BadGateway?

从Docker 0.6.5开始,您不需要为这种场景设置管道,您可以使用新的容器链接功能.基本上,你告诉码头工人从一个可用的容器到另一个容器的端口.

这也很容易做到.

你想做的是有一个容器,PHP5-fpm(让我们调用这个容器PHP5-fpm)配置为侦听端口9000并运行如下:

docker run -d -p 9000 -name PHP PHP5-fpm /usr/sbin/PHP5-fpm -F

我们使用-F标志运行PHP5-fpm,以便它不进行后台处理.如您所见,我们使用-name来明确命名我们的容器.我们将使用这个名称在我们将使用Nginx容器创建的链接中引用它.

然后你可以运行你的Nginx(称为Nginx)容器:

docker run -i -t -link PHP:PHP Nginx /bin/bash

-link选项告诉docker链接别名PHP下的PHP容器.别名是强制性的.

我们现在在我们的Nginx容器中有一个shell,我们可以使用env命令来检索PHP5-fpm容器的映射ip和port:

root@061fe34bd07b:/# env
HOSTNAME=061fe34bd07b
TERM=xterm
PHP_PORT=tcp://172.17.0.44:9000
PHP_PORT_9000_TCP_PROTO=tcp
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/etc/Nginx/sites-enabled
PHP_PORT_9000_TCP_PORT=9000
SHLVL=1
HOME=/
PHP_PORT_9000_TCP=tcp://172.17.0.44:9000
PHP_NAME=/crimson_squirrel9/PHP
DEBIAN_FRONTEND=noninteractive
PHP_PORT_9000_TCP_ADDR=172.17.0.44
container=lxc
OLDPWD=/
_=/usr/bin/env

这里有一些有趣的env vars.我们正在寻找的是PHP_PORT,因为它提供了关于链接容器的最完整的信息:

PHP_PORT=tcp://172.17.0.44:9000

您现在可以将Nginx的PHP5-fpm上游配置为172.17.0.44:9000,启动它,并检查它是否正常工作:

/etc/init.d/Nginx start
curl http://127.0.0.1/index.PHP

沃拉!我跳过了容器的配置和配置,因为你似乎已经拥有了这个权限)

链接到官方链接教程,使用redis:http://docs.docker.io/en/latest/examples/linking_into_redis/

php – Docker和容器之间的连接的更多相关文章

  1. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. ios – 将容器带到视图前方

    我怎样才能解决这个问题?

  3. ios – 如何使用XCode 6.4下载和替换AppGroup容器

    我知道如何使用XCode6的Devices窗口下载和替换特定iOS应用程序的文件系统容器.但是对于我正在开发的应用程序,我需要能够下载和替换共享的AppGroup容器以进行调试.这将使我能够模拟AppGroup文件夹内容中的情况以进行测试.任何人都可以告诉我如何做到这一点?

  4. ios – 在UITableView上移动UIView – 触摸顶部UIView仍然选择表行

    =======用一些代码编辑:这是我在容器B中所做的代码.这是B帧的一个非常直接的动画.self.view是ContainerB的UIView.所有视图都在屏幕上通过故事板.其他容器是B的子视图.请让我知道你想看到的其他代码.解决方法嗯……不确定这是否适用于您的情况,但尝试在容纳所有其他容器的更大容器中管理您的动画.我的意思是,创建一个包含A,B,O及其子视图的ContainerZ,并尝试从Z中设置B的位置动画,检查B是否在A前面.

  5. ios – 与容器视图通信的最佳实践是什么?

    我最近经常使用容器VC,我一直想知道主Vc和容器VC之间的最佳通信方式是什么.现在我正在使用通知,但我宁愿使用更好的东西.如何获取指向容器VC的指针,以便至少可以使用委托?

  6. ios – 编程嵌入UIViewController?

    我有一个带有一个容器视图的UIViewController的Storyboard设置,以便我可以在其中嵌入另一个UIViewController.在某种情况下,我需要更改嵌入式视图控制器.在我的故事板中,我的容器视图不能有两个区段.这导致我以编程方式进行.我的容器视图在我的故事板,没有连接的嵌入.现在从这一点开始,我如何以编程方式嵌入我所选择的UIViewController对象?

  7. ios – 使用Swift访问非默认的Cloudkit容器

    我有一个IOS8应用程序,它成功地将记录写入其默认的Cloudkit容器.现在我希望在OSX下的不同应用程序中读取和处理这些记录.我已经设置了具有iCloud访问权限的新应用程序,并选中了“指定自定义容器”选项.这已成功找到原始应用程序和我的容器没有错误要在Capabilities界面上修复.我的所有搜索都告诉我“同一个开发人员签署的两个应用程序可能共享同一个容器”但我找不到的任何教程文档都告诉我

  8. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  9. ios – 嵌入在容器视图中的UINavigationController,显示大小错误的表视图控制器

    我正在尝试找到解决这种情况的方法:我有一个UITabBarController它的一个segue连接到一个容器视图控制器(BannerViewController),我用来嵌入一个UINavigationController,导航控制器推送其他容器视图控制器(EventListContainerviewController),每个包含一个tableview控制器.这是我的故事板上的一个屏幕问题是最

  10. 在ios 6中,如何在View控制器中使用“容器视图”对象和嵌入在其中的表视图控制器之间使用传递数据?

    我有一个带标签和文本字段的视图控制器.我还添加了一个容器视图,它指向另一个具有一个部分和3行的表视图控制器,基本上是静态表视图.我无法找到任何文档/示例,告诉您如何在容器视图中嵌入容器视图和表视图容器的View控制器之间传递数据.我想要双方沟通?

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部