使用'localhost'连接到docker-machine

big*_*ind 13 localhost docker docker-machine

有一些功能,比如没有https的JavaScript服务工作者,只能在localhost上运行,但是当我在docker容器中运行我的app时,使用docker-compose,它运行在docker-machine之上,我需要使用它连接到它我得到的地址

docker-machine ip default
Run Code Online (Sandbox Code Playgroud)

有没有办法映射localhost到该IP?

Kri*_*rle 28

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

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

vboxmanage modifyvm default --natpf1 "nameformapping,tcp,,8888,,80"
Run Code Online (Sandbox Code Playgroud)

或者如果VM正在运行

vboxmanage controlvm default natpf1 "nameformapping,tcp,,8888,,80"
Run Code Online (Sandbox Code Playgroud)

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

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

docker run -p 80:80 mycontainer
Run Code Online (Sandbox Code Playgroud)

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

另请参阅:https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md


Hem*_*ela 14

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

例:

1)获取docker主机ip地址

$ docker-machine ip default
192.168.99.100
Run Code Online (Sandbox Code Playgroud)

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

192.168.99.100 domain.com
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 对于Windows用户,hosts文件位于本地 C:\Windows\System32\Drivers\etc\hosts
  • 如果您只想在一个docker-machine中支持多个域,则可以在其他容器的前面创建一个nginx的代理容器.


Xel*_*ian 5

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

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

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

在此输入图像描述