docker nginx和php,php无法连接到localhost

Posted

技术标签:

【中文标题】docker nginx和php,php无法连接到localhost【英文标题】:docker nginx and php, php cant connect to localhost 【发布时间】:2022-01-12 13:13:38 【问题描述】:

我创建了一个对 8080:80 端口开放的 nginx 容器 所以我可以从主机访问它。

它连接到具有开放端口 9000:9000 的 php fpm 容器

nginx 用 php 成功运行。

我的问题是 php 试图访问 localhost:8080 但问题是 php localhost:8080 无效,需要连接到 nginx 容器。

这是我的 wordpress 网站上的错误: 你可以看到那里的东西很时髦...... 下面我将附上我的 docker-compose.yml


正在从http://localhost:8080/wp-content/themes/realtyspace/plugins/advanced-custom-fields-pro.zip下载安装包...

下载失败。 cURL 错误 7:无法连接到 localhost 端口 8080:连接被拒绝


docker-compose.yml

version: '2'
services:
  my-nginx:
    build: .
    volumes:
      - ./../:/var/www/html
    ports:
      - "8080:80"
    links:
      - my-php

  my-php:
    build:
      context: .
      dockerfile: Dockerfile.php-fpm
      volumes:
        - ./../:/var/www/html
      ports:
        - "9000:9000"
      links:
        - my-mysql

  my-mysql:
    image: mariadb:5.5
    volumes:
      - /var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: wp
      MYSQL_DATABASE: wp
      MYSQL_USER: wp
      MYSQL_PASSWORD: wp

【问题讨论】:

你是直接在 Linux 上运行它还是使用 Docker for Windows/Mac? 我在 Mac 上使用 docker,谢谢 所以你有一个循环引用,即 nginx 需要与 php 对话,而 php 需要与 nginx 对话? 【参考方案1】:

使用docker的内网,配置php访问http://my-nginx:80

localhost 将解析为 php 容器本身的隔离 IP,而不是运行所有内容的 Docker 主机的 IP。并且试图通过http://dockerhost:8080 将导致不可移植的 docker-compose.yml 和 iptables 防火墙和 nat 规则的问题,这些问题比它们的价值更麻烦。使用 v2 compose 文件的价值在于,您可以在 Docker 内部获得一个隔离的网络,其中每个容器的 DNS 解析可以相互协作。

【讨论】:

但是 php 代码尝试访问该 url,只是因为 url 没有?如果我给它一个 example.com 的 url,它只会尝试从那里获取 no? 我不确定您正在运行什么 php 代码,您的问题需要更多详细信息。

以上是关于docker nginx和php,php无法连接到localhost的主要内容,如果未能解决你的问题,请参考以下文章

无法在本地环境中使用 docker 连接到 cakephp 中的 mysql 数据库

我需要一个可以使用 php 连接到外部 MYSQL 数据库的 docker 映像

无法使用 django-channels 连接到 websocket,docker 上的 nginx 作为服务

无法使用 Nginx 反向代理连接到 Websocket 服务器

“名称解析中的临时失败”:Symfony 5.3 使用 Doctrine 和 Docker 连接到 MariaDB

docker-compose 中的“无法连接到本地 MySQL 服务器”