docker - Docker compose,从 windows 主机连接到容器
问题描述
我正在学习docker,所以请理解。
我的环境配置
- 我在 Windows (
8 64-bit
)上工作 - 我有
Docker toolbox
(以及kitematic
但我quickterminal
只使用) - 码头工人版本:
- 客户:
18.03.0-ce
- 服务器:
18.06.0-ce
- 客户:
- 码头机器:
ip:192.168.99.100
- 假设我有以下 kibana 图像
docker.elastic.co/kibana/kibana:6.3.2
创建容器:1 - 通过run
命令和 2 - 通过docker-compose
1 . docker container run -p 5601:5601 <image_name>
(让我们暂时跳过其他标志和设置)
当http://192.168.99.100:5601
在 windows 端发出时,它将我连接到default
在 virtualbox 上运行的 docker 机器,并通过提供-p <docker_host>:<container>
映射(libnetwork
?)将我的调用重定向到kibana
容器,因此我能够从 windows host 连接到容器。
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
and创建了一个新网络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": {}
}
]
当我通过命令创建容器时,我无法从Windows 主机连接到 kibana。http://192.168.99.100:5601
docker container run (...)
我相信问题src_tmp_net
出在创建的新网络 ( ) 中。docker 机器中是否缺少用于172.27.0.0/16
池的配置?
问题
为什么我无法docker compose
从我的 Windows 主机连接到上述创建的容器?
已编辑(14.8.18 - 21:37 Z):
按照评论中的要求。这kibana
是启动容器后的日志。它是由 记录的docker-compose up > kibana_logs.txt
。
回答(在我的情况下)
这正是@lvthillo 先生所指出的——kibana.yml
文件。在官方文档(对于 version 6.3
)Docker default
部分下,我们可以找到:
使用 Docker 映像时,以下设置具有不同的默认值:(...) server.host: "0" (...)。这些设置在默认的 kibana.yml 中定义。可以使用自定义 kibana.yml 或通过环境变量覆盖它们。重要的。如果将 kibana.yml 替换为自定义版本,如果要保留它们,请务必将上述默认值复制到自定义文件中。如果不是,它们将被新文件“屏蔽”。
在kibana 服务器属性中,我们可以找出究竟server.host:
是什么:
此设置指定后端服务器的 IP 地址。
这让我稍微了解了我的情况:
- 我的第
docker container run (...)
一种volume
方法kibana.yml
( - 我的第二种方法 (
docker-compose
) 不起作用,因为我在kibana.yml
没有设置的情况下指定/安装了我自己的文件server.host:
。它覆盖了默认文件,并且因为我没有在其中指定默认设置(server.host:
特别是)我无法连接。
解决方案
推荐阅读
- html - Angular 形式的 ngModel
- python - 使用 pyppeteer 与 asyncio 关联来抓取内容
- kubernetes - 我可以运行什么命令来获取最旧的 pod 的名称?
- postgresql - 如何使用 pgTAP 在 PostgreSQL 中测试 PROCEDURE?
- html - 如何为小屏幕自动折叠 Bootstrap 4 侧边栏?
- python-3.x - 使用 Python 3.7 阅读 MS Access
- python - 在 2D numpy 数组 python 中添加额外的列
- javascript - 不断用JS读取本地文件?
- angularjs - AngularJs - 控制器和指令之间的通信
- python - 批处理文件在被Python创建和写入后没有关闭?