首页 > 解决方案 > Docker compose,从 windows 主机连接到容器

问题描述

我正在学习docker,所以请理解。

我的环境配置


创建容器: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:bridgeand创建了一个新网络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 主机连接到 kibanahttp://192.168.99.100:5601docker 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.3Docker default部分下,我们可以找到:

使用 Docker 映像时,以下设置具有不同的默认值:(...) server.host: "0" (...)。这些设置在默认的 kibana.yml 中定义。可以使用自定义 kibana.yml 或通过环境变量覆盖它们。重要的。如果将 kibana.yml 替换为自定义版本,如果要保留它们,请务必将上述默认值复制到自定义文件中。如果不是,它们将被新文件“屏蔽”。

kibana 服务器属性中,我们可以找出究竟server.host:是什么:

此设置指定后端服务器的 IP 地址。

这让我稍微了解了我的情况:

  1. 我的第docker container run (...)一种volume方法 kibana.yml
  2. 我的第二种方法 ( docker-compose) 不起作用,因为我在kibana.yml没有设置的情况下指定/安装了我自己的文件server.host:。它覆盖了默认文件,并且因为我没有在其中指定默认设置(server.host:特别是)我无法连接。

标签: dockerdocker-compose

解决方案


推荐阅读