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...

相关文章
相关标签/搜索