我正在学习docker,请谅解。
8 64-bit
)上工作Docker toolbox
(以及kitematic
,但我仅使用quickterminal
)18.03.0-ce
18.06.0-ce
ip:192.168.99.100
docker.elastic.co/kibana/kibana:6.3.2
run
命令,2-通过docker-compose
1 。 docker container run -p 5601:5601 <image_name>
(让我们跳过其他
标志和设置)
在Windows端发出http://192.168.99.100:5601
时,它将我连接到在virtualbox上运行的default
码头工人机器,并提供-p <docker_host>:<container>
映射(libnetwork
?)来重定向我的呼叫到kibana
容器中,因此我可以从Windows主机连接到该容器。
docker container inspect <container_name>
告诉我使用了默认的bridge
网络。这意味着一切都按预期进行:
"NetworkSettings": {
(...)
"Ports": {
"5601/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "5601"
}
]
},
(...)
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "7(...)1",
"EndpointID": "3(...)4",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "0(...)2",
"DriverOpts": null
}
}
2 。我想通过docker-compose
实现相同的目标。让我们暂时跳过该示例的无意义的操作-就像我说的那样,仅出于学习目的。
version: "2"
services:
kibana:
container_name: kibana
hostname: kibana
image: "docker.elastic.co/kibana/kibana:6.3.2"
volumes:
- ./kibana.yml:/usr/share/kibana/config/kibana.yml
ports:
- "5601:5601"
networks:
- tmp_net
networks:
tmp_net:
driver: bridge
让我们提出docker-compose up
。在docker network ls
命令的输出中,我看到它用id:src_tmp_net
和driver:bridge
创建了一个新的网络scope:local
。正在检查新的网络:
[
{
"Name": "src_tmp_net",
"Id": "4(...)6",
"Created": "2018-08-14T19:59:50.269922334Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.27.0.0/16",
"Gateway": "172.27.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"7(...)c": {
"Name": "kibana",
"EndpointID": "d(...)f",
"MacAddress": "02:42:ac:1b:00:02",
"IPv4Address": "172.27.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
我无法像使用http://192.168.99.100:5601
命令创建容器那样,将Windows主机上的kibana连接到docker container run (...)
。
我认为问题出在创建的新网络(src_tmp_net
)中。 Docker机器中172.27.0.0/16
池中是否缺少配置?
为什么我无法从Windows主机连接到上述docker compose
创建的容器?
已编辑(14.8.18-21:37 Z):
根据评论中的要求。 Here是启动kibana
容器之后的日志。它是由docker-compose up > kibana_logs.txt
记录的。
@lvthillo先生指出的正是-kibana.yml
文件。在6.3
部分下的official documentation(对于版本Docker default
)中,我们可以找到:
在使用以下设置时,以下设置具有不同的默认值 Docker映像:(...) server.host:“ 0” (...)。这些设置是 在默认的kibana.yml中定义。可以用 自定义kibana.yml或通过环境变量。重要。 如果 用自定义版本替换kibana.yml,请确保复制上面的内容 如果要保留它们,则默认为自定义文件。如果没有,他们 将被新文件“屏蔽”。
在kibana server properties中,我们可以找出server.host:
到底是什么:
此设置指定后端服务器的IP地址。
这为我的情况提供了一点启示:
docker container run (...)
)有效是因为我
没有指定volume
来挂载和使用docker容器
非永久性存储,并且-根据上述规范-已使用
默认
kibana.yml
文件。docker-compose
)不起作用,因为我没有设置kibana.yml
就指定/挂载了自己的server.host:
文件。它覆盖了默认文件,并且因为我没有在其中指定默认设置(尤其是server.host:
),所以我无法连接。