Docker连接到本地主机

问题描述 投票:0回答:1

我有一些简单的代码,但在docker容器上运行时却无法工作。

    $h = curl_init();
    $header = [
        'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0',
        'Referer: 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_exec($h);
    if ( curl_errno($h) ) {
        echo "Curl Error: " . curl_error($h);
    }
    curl_close($h);
    echo $content;
    var_dump($content);
    echo file_get_contents($url);

上面我同时尝试了curl和file_get_contents。我只是想连接到运行在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_dump是空白。

file_get_contents会抛出一个警告。

我尝试了 host.docker.internal, 127.0.0.1, $_SERVER['SERVER_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)我没有很好地理解答案,无法实现它。

所以我在寻找更多的信息,而不仅仅是。"像文档上说的那样,通过-network=host"。我试过在wordpress的定义中加入network_mode: "host "到wordpress的定义中,但没有效果。

php docker docker-compose
1个回答
1
投票

你可以使用docker网络模式的主机。https:/docs.docker.comnetworkhost。如果你是在Linux下,但所有的虚拟域都会改变。

© www.soinside.com 2019 - 2024. All rights reserved.