簡體   English   中英

Docker容器 - 如何配置以便在vagrant中運行時獲得可行的IP地址?

[英]Docker container - how to configure so it gets a viable IP address when running in vagrant?

Docker(www.docker.io)看起來很棒。 但是,在Mac上安裝VirtualBox,Vagrant ......以及Docker之后,我發現無法從另一台計算機(或Mac上的終端會話)訪問Docker容器中運行的服務。 我正在嘗試訪問的服務是Redis。

問題似乎是沒有分配給Docker容器的IP地址的路由。 在這種情況下,容器的IP為172.16.42.2,而Mac的IP為196.168.0.3。

幾個筆記:

  1. 可以訪問它 - 但只能從VirtualBox會話中訪問它。 這可以使用redis-cli -h 172.16.42.2 -p 6379完成。
  2. 我已經將“config.vm.network:bridged”添加到VagrantFile以嘗試獲取,但這並沒有解決問題。

vagrant生成的VM確實是隔離的,為了從主機訪問它,您可以為其分配專用網絡。 而不是做config.vm.network :bridged ,嘗試config.vm.network :private_network, ip: "192.168.50.4" ,它應該做的伎倆

但是,這只允許您訪問VM本身,而不是容器。
為此,在運行容器時,可以添加-p選項

例如: docker run -d -p 8989 base nc -lkp 8989

這將在容器內運行netcat監聽8989並公開公開端口。 由於它也使用-d運行,容器將處於分離模式,唯一的輸出將是容器的ID

為了公開端口,Docker做了一個簡單的NAT。 為了知道真正的端口,你可以

docker port <ID of the container> 8989

Netcat將在192.168.50.4:<result>中提供

我剛剛編寫了一個如何使用僅主機網絡和TCP路由的教程,使這很容易。 這樣您就不必映射每個特定端口。

http://ispyker.blogspot.com/2014/04/accessing-docker-container-private.html

重點......

1)將僅主機網絡添加到Virtual Box 2)告訴boot2docker VM在僅主機網絡上具有適配器3)為新boot2docker VM主機網絡適配器添加IP 4)路由所有Mac OS X流量docker container子網到該boot2docker VM主機網絡IP

實際步驟在博客上有輸出,因此您可以與您跟隨它們時看到的內容進行比較。

我已經從我的Dockerfile安裝了tomcat,並使用vagrant的端口轉發將其轉發到6060。 以下是為我工作的步驟:

vagrant provision
vagrant up
vagrant ssh
box_name$ docker run  -i -t -p 8080:8080 bsb_tomcat6 /bin/bash

能夠在localhost:6060上看到tomcat並運行,因為我已經在我的Vagrantfile中將端口轉發到6060

您還可以定義PRIVATE_NETWORK和FORWARD_DOCKER_PORTS環境變量來訪問在docker容器中運行的服務:

$ vagrant halt
$ export PRIVATE_NETWORK=192.168.50.4
$ export FORWARD_DOCKER_PORTS=1
$ vagrant up

在我的情況下,我可以使用從Mac訪問postgres

$ telnet 192.168.50.4 49154

找出你可以使用的實際應用程序端口

$ sudo docker port 1854499c6547 5432
0.0.0.0:49154

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM