Windows7 下Ubuntu VM 中Docker鏈接不上的問題及解決方案

最近在學習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

首先咱們確認了,Ubuntu中的Docker已經在運行

這點咱們能夠經過docker ps,docker pull或docker push等命令確認。

其次,查看 netstat -an|grep 2375 的結果

發現此端口沒有處於監聽狀態。

經過Docker status命令確認2375確實沒有處於監聽狀態

輸出包括相似以下信息:

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

備註:使用Ubuntu後,只解決了最初的第一個問題,插拔網線的問題仍然存在,可是如今的結果已經可以知足咱們的要求了。

參考

https://stackoverflow.com/que...
https://stackoverflow.com/que...

相關文章
相關標籤/搜索