当前位置: 首页 > 面试题库 >

如何正确链接php-fpm和Nginx Docker容器?

衡高寒
2023-03-14
问题内容

我正在尝试链接2个单独的容器:

  • nginx:最新
  • 的PHP:FPM

问题是php脚本不起作用。也许php-fpm配置不正确。这是源代码,位于我的资源库中。这是文件docker-compose.yml

nginx:
    build: .
    ports:
        - "80:80"
        - "443:443"
    volumes:
        - ./:/var/www/test/
    links:
        - fpm
fpm:
    image: php:fpm
    ports:
        - "9000:9000"

以及Dockerfile我用来基于nginx构建自定义图片的图片:

FROM nginx

# Change Nginx config here...
RUN rm /etc/nginx/conf.d/default.conf
ADD ./default.conf /etc/nginx/conf.d/

最后,这是我自定义的Nginx虚拟主机配置:

server {
    listen  80;

    server_name localhost;
    root /var/www/test;

    error_log /var/log/nginx/localhost.error.log;
    access_log /var/log/nginx/localhost.access.log;

    location / {
        # try to serve file directly, fallback to app.php
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/.+\.php(/|$) {
        fastcgi_pass 192.168.59.103:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
    }
}

有人可以帮助我正确配置这些容器以执行php脚本吗?

PS 我像这样通过docker-composer运行容器:

docker-compose up

从项目根目录。


问题答案:

不要在nginx config中对容器的ip进行硬编码,docker link将链接机器的主机名添加到容器的hosts文件中,您应该能够按主机名ping。

编辑:Docker 1.9 Networking不再需要您链接容器,当多个容器连接到同一网络时,它们的主机文件将被更新,以便它们可以通过主机名相互访问。

每次docker容器从映像启动(甚至停止/启动现有容器)时,这些容器都会获得docker主机分配的新IP。这些ip与您的实际计算机不在同一子网中。

查看docker链接文档(这是compose在后台使用的内容)

docker- compose在链接和公开文档中更清楚地解释了

链接

links:
 - db
 - db:database
 - redis

别名名称的条目将在此服务的容器内的/ etc / hosts中创建,例如:

172.17.2.186  db
172.17.2.186  database
172.17.2.187  redis

暴露

在不将端口 发布到主机的情况下 公开端口-只有 链接的服务 才能 访问 它们。只能指定内部端口。

如果您设置项目以通过环境变量获取端口和其他凭据,则链接会自动设置一堆系统变量:

要查看哪些环境变量可用于服务,请运行docker-compose run SERVICE env

name_PORT

完整网址,例如DB_PORT = tcp://172.17.0.5:5432

name_PORT_num_protocol

完整网址,例如 DB_PORT_5432_TCP=tcp://172.17.0.5:5432

name_PORT_num_protocol_ADDR

容器的IP地址,例如 DB_PORT_5432_TCP_ADDR=172.17.0.5

name_PORT_num_protocol_PORT

公开的端口号,例如 DB_PORT_5432_TCP_PORT=5432

name_PORT_num_protocol_PROTO

协议(tcp或udp),例如 DB_PORT_5432_TCP_PROTO=tcp

name_NAME

完全合格的容器名称,例如 DB_1_NAME=/myapp_web_1/myapp_db_1



 类似资料:
  • 问题内容: 我一直在做一个小项目,我发现自己处在一个需要php函数的位置,该函数可以链接数据中的URL,同时使我可以在不想链接的链接上设置一些例外。任何想法如何做到这一点? 问题答案: 我在GitHub上有一个开源项目:LinkifyURL,您可能要考虑一下。它具有一个功能:从文本中提取URL并将其转换为链接。请注意,这不是一项微不足道的任务! 如果您确实不需要链接特定的域(即vimeo和yout

  • 我正在尝试使用Apache2.2和PHP-FPM mod_fcgi设置获得一个基本的CakePHP 2.4应用程序设置,我遇到了内部重定向问题,我似乎无法解决。 apache只有所需的模块加载和基本设置 PHP Fastcgi进程设置如下所示 使用默认的CakePHP 2.4分支,我得到以下错误 我已经尝试了几乎每一个建议和技巧,我可以找到的蛋糕重定向问题,但它似乎归结为php-fpm设置 我的重

  • 在 OpenResty 中,连接池在使用上如果不加以注意,容易产生数据写错地方,或者得到的应答数据异常以及类似的问题,当然使用短连接可以规避这样的问题,但是在一些企业用户环境下,短连接 + 高并发对企业内部的防火墙是一个巨大的考验,因此,长连接自有其用武之地,使用它的时候要记住,长连接一定要保持其连接池中所有连接的正确性。 -- 错误的代码 local function send() fo

  • 我正在使用React和React路由器尝试将我的组件链接到一个项目中。我想从主页(当前组件)链接一张图片到另一个组件。 目前我可以点击图片,它有点像一个链接(有时点击后变成蓝色),尽管它没有链接到其他组件,没有错误显示,网址栏中没有任何变化。什么都没发生。 有什么想法吗?这是我的代码: 代码错误:react dom。发展js:17117上述错误发生在组件中:img(由Home创建)中div(由Ho

  • 我创建了2个Docker图像。一个是tomcat,另一个是Apache。我可以让它们单独运行,但我试图通过AJP将apache代理到tomcat 目前我得到以下信息: [Thu 3月17日15:49:43.373689 2016年][代理:错误][pid 11:TID 140213099689728](111)连接被拒绝:AH00957:AJP:试图连接到127.0.0.1:8009(本地主机)失

  • 在我的系统更新之后,我在Nginx上运行的PHP应用程序遇到了一个坏的网关错误。 1连接()到unix:/var/run/php-fcgi-vhostname-php-fcgi-0.sock失败(13:权限被拒绝),同时连接到上游,客户端:xx.xxx.xx.xx,服务器:localhost,请求:"GET/HTTP/1.1",上游:"快速cgi://unix:/var/运行/php-fcgi-v