docker的其他两种容器互联方法:
docker使用--link的方式创建两个容器运行的PHP环境
docker使用network的方式创建两个容器运行的PHP环境
这个实例为了演示docker容器互联的案例之一。
该互联采用的方案是宿主机端口绑定达到其中nginx容器使用PHP容器的PHP解释执行程序。
docker -p参数使用,跟主机网络端口绑定,相当于是主机上的应用。
创建两个容器,PHP如下,采用的是php7,php-fpm模式运行
docker run -it -d --name php -p 9000:9000 -v /tmp:/usr/share/nginx/html phpdockerio/php7-fpm
创建nginx容器,
docker run -it -d -p 8080:80 -v /tmp:/usr/share/nginx/html --name=nginx nginx
备注:这里做了端口映射和将本地目录挂载到容器目录,之所以让两个容器都映射到宿主机同一目录,下文有解释,保证nginx和PHP容器都能访问到文件,否则环境配置失败,找不到文件错误。
配置运行,
php-fpm默认运行在端口9000上,在nginx.conf中配置如下,
红线部分是开启php解释执行程序,由于是远程容器生成的PHP环境,这里的root配置应该为PHP环境的目录,不在nginx容器中。
fastcgi_pass,填入宿主机的ip:9000,这里不能填入PHP容器的IP,PHP容器ip是访问不到的。
下面部分从其他博文转摘而来。
请注意这里有两个路径,一个是root(图1的地方),这里指的是请求到达根nginx后根路径/访问的服务器的文件地址。
重点注意第二个:
因为在解析PHP的location中,进入到这个location中的请求,都是需要php-fpm去解析的,在图中2标记的地方,是告诉php-fpm,在php-fpm所在的机器上,需要解析的PHP代码在什么路径。通常标记2的地方的默认写法都是fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 会将图二中/data/www的路径由变量$document_root代替,而这个时候,由于没有特殊的指定$document_root,所以,通常都是指server下的root路径。如果同一台机器下还可以,但是nginx和php-fpm不同机器就不行了,必须指定php-fpm机器下的路径。(PS:也就是说nginx和php-fpm所在的两台机器下都要有代码。)
以上配置参考博文:https://blog.csdn.net/i6448038/article/details/77435897