php - Docker连接到本地主机

标签 php docker docker-compose

我有一些简单的代码在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”。我尝试将network_mode:“host”添加到wordpress定义中,这并不令人高兴。

最佳答案

您可以使用docker网络模式主机:https://docs.docker.com/network/host/
如果您使用的是Linux,但所有虚拟域都会更改

关于php - Docker连接到本地主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61878417/

相关文章:

docker - docker-compose:为非docker服务器名称声明别名

php - fatal error get_label() woocommerce 运输

php - MySQL:一次查询多行更新

docker - 为特定的 ubuntu 版本安装特定版本的 apt 包

docker - Cloud-init 配置 Ubuntu docker 容器?

Docker 卷无法与 Docker-compose 一起生成 Doxygen 文档

node.js - 文件更改时,keystonejs docker-compose重新启动服务器

php - Wordpress 表在 AJAX/PHP 后不会更新(即使有 200 ok 响应)

php - 使用 MySQLI 获取列并转换为数组

docker - 在 RUN 语句中使用 dockerfile 参数