Laravel App向同一nginx Docker容器上的本地API发出HTTP请求



docker-compose.yml

web:
  build: ./docker-images/nginx
  ports:
    - "8080:80"
  volumes:
    - ./:/var/www/
    - ./docker-conf/vhost.conf:/etc/nginx/sites-enabled/vhost.conf
  links:
    - php
php:
  image: nmcteam/php56
  volumes:
    - ./docker-conf/php-fpm.conf:/etc/php5/fpm/php-fpm.conf
    - ./:/var/www

nginx vhost.conf

server {
    listen 80;
    index index.php index.html;
    server_name myapi.dev;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/myapi/public;
    location / {
        try_files $uri /index.php?$args;
    }
    location ~ .php$ {
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}
server {
    listen 80;
    index index.php index.html;
    server_name mywebapp.dev;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/mywebapp/public;
    location / {
        try_files $uri /index.php?$args;
    }
    location ~ .php$ {
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

windows主机文件

192.168.99.2        mywebapp.dev
192.168.99.2        myapi.dev

docker vm ip

$ docker-machine ip default
192.168.99.2

好吧,您已经看到了上面的代码块和配置。。。

我尝试使用Guzzle从mywebapp中向myapi.dev/resource?apikey=myapikey位置发出GET请求。我尝试过google.com,所以我知道它有效,我只是不知道应该如何在本地请求。

我尝试过的其他一些域都没有用:

127.0.0.1/resource?...
192.168.99.2/resource?...
0.0.0.0/resource?...
172.17.0.2/resource?...

我知道代码是有效的,因为我用过xampp,它有效,但没有上面的docker配置。

如果我理解你所写的内容是正确的,那么你已经将myapi.dev添加到了windows主机文件中,但没有将docker vm添加到其中?如果你的网站在docker VM中运行,你需要在那里添加代码,否则它将无法解析你使用的自定义DNS(我假设你实际上没有用于全局DNS目的的域)。

因为你的nginx配置使用了特定的名称,所以你不能使用本地IP地址,因为它们不会被解析为那些nginx服务器条目。如果定义了一个默认的nginx服务器,那么您最终会得到一个。

最新更新