最近在學習Java微服務,不可避免的會涉及到將微服務容器化。
因爲使用Windows7做爲開發環境,最初幾天用了VirtualBox 和 boot2docker,可是常常會出現以下兩個問題:
1,在電腦重啓後,全部在docker-machine中的配置信息都會丟失;
2,插拔網線後,運行中的容器沒法再訪問。docker
這兩個問題不是隻有我遇到過,和我一塊兒研究docker的同事也遇到一樣的狀況。shell
爲了嘗試解決上述問題,咱們基於VirtualBox,安裝了Oracle官網提供的Ubuntu的虛擬機鏡像。ubuntu
首先咱們決定網絡選用橋接模式,主要基於幾點考慮:
1, Ubuntu中的Docker須要可以鏈接外網以獲取須要的公共鏡像;
2, 本地的開發環境或其餘機器,須要可以直接訪問Docker容器的宿主機(即Ubuntu VM),以便經過maven或命令行的方式執行Docker命令;或者經過瀏覽器訪問容器化的eureka以及其餘應用。瀏覽器
橋接模式的設定,能夠經過在VirtualBox中選擇Ubuntu實例,點擊Settings->Network->Adapter1,而後選擇Bridged Adapter,以後保存便可。(須要注意的是Ubuntu實例要在中止狀態才能夠選擇)網絡
關於Ubuntu具體的安裝步驟和其餘配置,網上有不少文章介紹,這裏再也不贅述。curl
下面說一下在Ubuntu中安裝了Docker以後出現困擾咱們一天的問題。maven
經過本地環境嘗試鏈接Ubuntu的Docker Daemon(即監聽Docker並對外提供服務的進程)tcp
$curl 10.213.22.202:2375 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed Cannot connect to the Docker daemon. Is the docker daemon running on this host?
其中2375(或2376)爲Docker Daemon的默認監聽端口,10.213.22.202爲橋接模式下虛擬機得到的網絡地址。微服務
Virtualbox: 5.1.20學習
Ubuntu VM: ubuntu-16
docker installed: 17.06.0
這點咱們能夠經過docker ps,docker pull或docker push等命令確認。
發現此端口沒有處於監聽狀態。
輸出包括相似以下信息:
root@ubuntu:~# /etc/init.d/docker status docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since vr 2017-09-25 12:41:48 EDT; 15min ago Docs: https://docs.docker.com Main PID: 1008 (docker) CGroup: /system.slice/docker.service └─1008 /usr/bin/docker daemon -H fd://
/etc/systemd/system/docker.service.d/docker.conf
此文件若是沒有就新建立一個。增長以下內容:
[Service] ExecStart= ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
/etc/init.d/docker
將DOCKER_OPTS="",更新爲 DOCKER_OPTS="-H tcp://0.0.0.0:2375"
DOCKER_OPTS="-H tcp://0.0.0.0:2375"
從新啓動Docker,再次經過curl命令訪問,問題解決。
root@ubuntu:~# /etc/init.d/docker restart
https://stackoverflow.com/que...
https://stackoverflow.com/que...