Docker for windows:如何从dev机器访问容器(通过ip / dns名称)

时间:2016-11-10 21:51:02

标签: docker docker-compose

似乎有人问过这样的问题,但我根本没有得到它。

我有一个窗口10 dev机器主机,带有用于安装Windows的docker。除了其他网络,它还拥有DockerNAT网络,IP为10.0.75.1

我使用docker-compose运行一些容器:

version: '2'
services:
    service_a:
        build: .
        container_name: docker_a

它创建了一些网络bla_default,容器有IP 172.18.0.4,ofcource我无法从主机连接到172.18.0.4 - 它没有任何netwrok接口。

如何才能从HOST机器访问此容器? (通过IP),如果可能的话,通过一些DNS名称?我应该在docker-compose.yml中添加什么,如何配置netwroks?

对我而言,它应该是基本的东西,但我真的不明白所有这些东西是如何工作的,也不是直接从主机访问容器。

2 个答案:

答案 0 :(得分:3)

允许从开发机器访问内部docker网络:

route /P add 172.0.0.0 MASK 255.0.0.0 10.0.75.2

然后使用此https://github.com/aacebedo/dnsdock启用DNS发现。 提示:

> docker run -d -v /var/run/docker.sock:/var/run/docker.sock --name dnsdock --net bridge -p 53:53/udp aacebedo/dnsdock:latest-amd64

> add 127.0.0.1 as DNS server on dev machine

> Use labels described in docs to have pretty dns names for containers

原来问题的答案是: 我们可以! 哦,这不是实际的。

让DOCKER再次伟大!

答案 1 :(得分:1)

最简单的选择是端口映射:https://docs.docker.com/compose/compose-file/#/ports

只需添加

ports:
    - "8080:80"

到compose中的服务定义。如果您的服务侦听端口80,则对主机上localhost:8080的请求将转发到容器。 (我正在使用docker机器,所以我的docker主机是另一个IP,但我认为localhost是windows的docker出现的方式)

将服务视为一个(或几个)端口上的单个进程,对我来说效果最好,但如果您想开始阅读有关网络选项的内容,可以参考以下内容:

https://docs.docker.com/engine/userguide/networking/ Docker关于网络的官方页面 - 一个非常高级别的介绍,大部分关于默认桥接行为的详细信息。

http://www.linuxjournal.com/content/concerning-containers-connections-docker-networking 有关docker主机内网络布局的更多信息

http://www.dasblinkenlichten.com/docker-networking-101-host-mode/ 主机模式有点神秘,我很好奇它是否在Windows上运行类似。