我有一个localhost:56000
从Visual Studio项目在调试模式下运行的WCF服务。我还有一个运行在Docker容器中的LAMP应用程序localhost:8080
。在我的configuration.php中,我有一个全局可用的变量SoapUri
,它被设置为wsdl端点public $SoapUri = 'https://[WCF-server-address]/serviceName.svc?wsdl';
。
这适用于生产,但设置$ SoapUri public $SoapUri = 'http://localhost:56000/serviceName.svc?wsdl';
不起作用。
我知道localhost引用容器内的localhost,我可以使用一个特殊的DNS名称'host.docker.internal'来引用容器主机,但更改$ SoapUri public $SoapUri = 'http://host.docker.internal:56000/serviceName.svc?wsdl';
也不起作用。
我也试过这个:
C:\Users\userName>ipconfig
Windows IP Configuration
Ethernet adapter vEthernet (DockerNAT):
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::cd21:7994:1a5a:7cc0%3
IPv4 Address. . . . . . . . . . . : 10.0.75.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
然后设置为 public $SoapUri = 'http://10.0.75.1:56000/serviceName.svc?wsdl';
这似乎是最有希望的,因为我不会马上抛出这个错误......
php_1 | [20-Jul-2018 19:06:27] WARNING: [pool www] child 5 said into stderr: "NOTICE: PHP message: PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'host.docker.internal:56000/serviceName.svc?wsdl' : failed to load external entity "host.docker.internal:56000/serviceName.svc?wsdl""
...但反而先超时然后抛出错误,但我认为这是误导。
显然我在这里遗漏了一些东西,并且当我尝试从容器中查找本地wsdl地址时,我真的不明白发生了什么。
发布于 2018-09-03 10:50:11
转到您的docker容器,获取主机IP地址并替换您的代码。
public $SoapUri = 'http://host_ip_address:56000/serviceName.svc?wsdl';
有关如何获取主机IP的信息:如何从docker容器中获取docker主机的IP地址
如果要设置主机IP,此处有一些说明如何在创建docker机器或容器时设置特定(固定)IP地址?这里有没有办法强制docker-machine用特定的ip创建vm?
PS:您可能想要做一些逻辑来检测环境并替换地址。
https://stackoverflow.com/questions/-100002535
复制相似问题