Linux 对父服务器中本地主机的Docker容器访问
我的docker容器有点问题。为了在elasticsearch中执行查询,我试图通过curl从容器访问我的父服务器localhost。Elastic仅在父服务器上的本地区域工作Linux 对父服务器中本地主机的Docker容器访问,linux,docker,
elasticsearch,networking,Linux,Docker,
elasticsearch,Networking,我的docker容器有点问题。为了在elasticsearch中执行查询,我试图通过curl从容器访问我的父服务器localhost。Elastic仅在父服务器上的本地区域工作 curl http://127.0.0.1:9200 curl: (7) Failed to connect to 127.0.0.1 port 9200: Connection refused 容器ip为172.17.0.3,我可以从父服务器ping容器 这是我的docker build cd ./api_docke
curl http://127.0.0.1:9200
curl: (7) Failed to connect to 127.0.0.1 port 9200: Connection refused
容器ip为172.17.0.3,我可以从父服务器ping容器
这是我的docker build
cd ./api_docker
container="$(docker ps | grep "visitors/api:gniewoy" | cut -d " " -f1)"
git reset --hard HEAD &&
git pull &&
composer update &&
docker build -t visitors/api:gniewoy . &&
cd ../
docker kill $container &&
docker run -p 705:80 --env-file docker_api_env -d /etc/docker/
建成后,continer在端口705上工作正常,但这只是弹性问题。
下面是我的康奈尔之死
"NetworkSettings": {
"Bridge": "",
"SandboxID": "",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"443/tcp": null,
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "705"
}
]
},
"SandboxKey": "",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "",
"EndpointID": "",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": ""
}
}
}
我在Debian8工作。谢谢您需要通过-p标签共享端口,类似于
-p 9200:9200
这里,第一个9200是内部端口,第二个是容器端口
查看一下您需要共享port by-p标签,类似于
-p 9200:9200
这里,第一个9200是内部端口,第二个是容器端口
看一看在主机上实现环回的唯一方法是在同一个环回网络上。默认情况下,docker将在其独立的网络名称空间中运行容器,该名称空间包括其独立的环回接口。要使用主机的环回(以及主机的其余网络堆栈)运行,您可以调用:
docker run --net host ...
使用docker-compose.yml,您将包括有关服务的以下部分:
network_mode: "host"
如果您可以将弹性服务器配置为侦听所有接口,那么从容器端进行侦听会更好(尽管这可能会引入其他安全问题)。然后,您将从容器连接到主机上的非环回ip。在主机上实现环回的唯一方法是位于同一环回网络上。默认情况下,docker将在其独立的网络名称空间中运行容器,该名称空间包括其独立的环回接口。要使用主机的环回(以及主机的其余网络堆栈)运行,您可以调用:
docker run --net host ...
使用docker-compose.yml,您将包括有关服务的以下部分:
network_mode: "host"
如果您可以将弹性服务器配置为侦听所有接口,那么从容器端进行侦听会更好(尽管这可能会引入其他安全问题)。然后,您将从容器连接到主机上的非环回ip。您的配置需要是/etc/elasticsearch/elasticsearch.yml
network :
host : 127.0.0.1 //or ifconfig (ex eth0 : IP)
您的配置需要是/etc/elasticsearch/elasticsearch.yml
network :
host : 127.0.0.1 //or ifconfig (ex eth0 : IP)
弹性监听是在所有接口(0.0.0.0)上,还是仅在环回(127.0.0.1)上?弹性监听是在127.0.0.1上,弹性监听是在所有接口(0.0.0.0)上,还是仅在环回(127.0.0.1)上?弹性监听是在127.0.0.1上?我这样尝试过,但在docker容器中仍然无法实现弹性监听。我甚至尝试使用主机作为docker ip 172.17.0.3。同样,我使用了
network.bind_host:127.0.0.1//或172.17.0.3
@gniewj您需要更改配置日志存储配置以放置elasticsearch,而不是127.0.0.1。这个问题(docker elastic..)在这里得到了解决:我尝试过这样做,但在docker容器中仍然无法访问elastic。我甚至尝试使用主机作为docker ip 172.17.0.3。同样,我使用了network.bind_host:127.0.0.1//或172.17.0.3
@gniewj您需要更改配置日志存储配置以放置elasticsearch,而不是127.0.0.1此问题(docker elastic..)在这里得到解决:我使用共享端口9200构建了容器,但当我尝试运行elastic时,然后是线程“main”BindHttpException[绑定到[9200]失败]中的一些问题异常代码>。Elastic无法运行,因为端口9200已在使用共享端口9200的内置容器中,但当我尝试运行Elastic时,线程“main”BindHttpException[绑定到[9200]失败]中出现了一些问题异常代码>。弹性无法运行,因为端口9200已在使用中