Php Docker连接到本地主机

Php Docker连接到本地主机,php,docker,docker-compose,Php,Docker,Docker Compose,我有一些在docker容器上运行时不起作用的简单代码 $h=curl_init(); $header=[ '用户代理:Mozilla/5.0(X11;Linux x86_64;rv:33.0)Gecko/20100101 Firefox/33.0', “推荐人:https://shoots.video', ]; $url=str_replace(“localhost:8080”、“localhost”、$url); curl_setopt($h,CURLOPT_HTTPHEADER,$heade

我有一些在docker容器上运行时不起作用的简单代码

$h=curl_init();
$header=[
'用户代理:Mozilla/5.0(X11;Linux x86_64;rv:33.0)Gecko/20100101 Firefox/33.0',
“推荐人:https://shoots.video',
];
$url=str_replace(“localhost:8080”、“localhost”、$url);
curl_setopt($h,CURLOPT_HTTPHEADER,$header);
curl_setopt($h,CURLOPT_URL,$URL);
curl_setopt($h,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($h,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($h,CURLOPT_RETURNTRANSFER,true);
$content=curl\u exec($h);
如果(旋度误差($h)){
回声“旋度误差:”.Curl_误差($h);
}
卷曲关闭($h);
echo$内容;
var_dump($content);
回显文件获取内容($url);
上面我尝试了curl和file\u-get\u内容。我只想连接到docker容器上运行的apache实例以加载网页

我得到的是:

string(0) ""

Warning: file_get_contents(http://localhost/flat-listings/?search_location=&search_radius=50&per_page=25&page=1&order=desc&orderby=rating-desc): failed to open stream: Cannot assign requested address
curl请求的var_转储为空

文件内容抛出一个警告

我尝试了host.docker.internal、127.0.0.1、$\u SERVER['SERVER\u ADDR']的变体,但都出现了不同的故障

这些容器是从docker compose文件运行的,因此如果我可以在docker-compose.yml中放入一些东西来修复它,那就太酷了

请理解,我想要100%的本地主机行为。没有别的了。我想从容器内部连接到容器。我似乎不明白为什么这样不行?我不想连接到mysql或其他东西。它只是一个php脚本,通过请求同一“网站”上的另一个页面连接回HTTP服务器

我正在linux上使用Docker

这是我的docker-compose.yml

version: '3.3'
services:
  mysql: 
    image: mariadb
    container_name: shootsmysql
    volumes:
      - vshootsdb:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: xxxx
      MYSQL_DATABASE: wordpress1
      MYSQL_USER: wordy
      MYSQL_PASSWORD: xxxx
    restart: always
    ports:
      - '3306:3306'
    expose:
      - '3306'
  wordpress:
    image: andreccosta/wordpress-xdebug
    container_name: shootswordpress
    volumes:
      - vshootswp:/var/www/html/
    depends_on:
      - mysql
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_NAME: wordpress1
      WORDPRESS_DB_USER: wordy
      WORDPRESS_DB_PASSWORD: xxxx
      WORDPRESS_TABLE_PREFIX: wp1_
    links:
      - mysql
    restart: always
    ports:
      - "80:80"
    expose:
      - '80'
volumes:
  vshootsdb: 
  vshootswp: 
    driver: local
    driver_opts:
      o: bind
      type: none
      device: /var/www/shoots/wordpress/
我已经研究了几种可能的解决方案(包括SO),要么a)我无法让它们工作,要么b)我对答案理解不够好,无法实施


因此,我要寻找的信息不仅仅是“Pass-network=host,就像文档中说的那样”。我已经尝试将网络模式:“主机”添加到wordpress的定义中,但没有乐趣。

您可以使用docker网络模式主机:
如果您在Linux中,但所有虚拟域都将更改为双重检查,那么您正在从应用程序代码调用同一服务的HTTP接口<代码>本地主机应该在那里工作。您的URL提到端口8080,但您的
docker compose.yml
有端口80,这两个端口设置是否正确?代码删除了8080,原因是因为这是wordpress安装,所以URL是通过该方法设置的。这些端口正在转发(成功)网站的所有其他部分,但不是这一个脚本。写docker ps,你可以看到暴露的端口我已经专门尝试过了,没有任何乐趣。为了清楚起见,我在docker compose中使用了网络模式:“主机”。所以这并不意味着我做得对。。。