我有一些简单的代码在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”,这很不高兴。