Connect to docker-machine using 'localhost'

时间:2016-02-12 21:22:38

标签: docker localhost docker-machine

There are certain features, like JavaScript service workers without https, that only work on localhost, but when I run my app inside a docker container, using docker-compose, which runs on top of docker-machine, I need to connect to it using the address I get from

reading.blob = json.loads(blob_json)

Is there a way to map docker-machine ip default to that ip?

3 个答案:

答案 0 :(得分:28)

您可以向前添加VirtualBox端口,以将docker主机上的端口映射到本地计算机。

假设您的docker机器被称为“默认”,并且您想要将容器中的端口80映射到localhost:8888,您可以运行:

vboxmanage modifyvm default --natpf1 "nameformapping,tcp,,8888,,80"

或者VM正在运行

vboxmanage controlvm default natpf1 "nameformapping,tcp,,8888,,80"

这也可以在VM的设置中的VirtualBox UI中完成。以下是VirtualBox https://www.virtualbox.org/manual/ch06.html#network_nat

的文档

您还需要将容器上的端口映射到docker机器上的端口,在启动容器时执行此操作(这也假设您的Dockerfile中有“EXPOSE 80”命令

docker run -p 80:80 mycontainer

https://docs.docker.com/engine/reference/run/

另见:https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

答案 1 :(得分:14)

编辑hosts文件会导致本地计算机仅直接查找为域指定的IP地址。因此,您可以将docker-machine的IP地址添加到本地计算机中的etc\hosts文件,并将容器上的端口80映射到80上的端口docker-machine {1}}。

示例:

1)获取docker主机ip地址

$ docker-machine ip default
192.168.99.100

2)将此行添加到本地计算机中的etc/hosts文件

192.168.99.100 domain.com

3)检查您的计算机是否正在解析域。

$ ping domain.com
PING domain.com (192.168.99.100): 56 data bytes
64 bytes from 192.168.99.100: icmp_seq=0 ttl=64 time=0.294 ms
64 bytes from 192.168.99.100: icmp_seq=1 ttl=64 time=0.437 ms
64 bytes from 192.168.99.100: icmp_seq=2 ttl=64 time=0.556 ms
64 bytes from 192.168.99.100: icmp_seq=3 ttl=64 time=0.270 ms

注意:

  • 对于Windows用户,hosts文件位于C:\Windows\System32\Drivers\etc\hosts
  • 如果您只想在一台泊坞机中支持多个域,则可以在其他容器前面创建一个内容为nginx的代理容器。

答案 2 :(得分:5)

最简单的方法是从VBox进行端口转发

设置 - >网络 - >适配器1->端口转发

然后添加Name,在主机添加127.0.0.1(对于本地主机)然后正确的端口绑定并重新启动VM。

enter image description here