Docker问题

在实践过程中遇到的一些问题。有些问题很奇怪,找不到原因——可见Docker当前不够成熟——但是多数问题能通过重启或重建虚拟主机解决,详细请参考Toolbox常见问题解决方案。这些问题不管已解决或未解决,都记录如下。

环境

操作系统:
window:window7 service pack 1(window7.1) |
ubuntu : Ubuntu 14.04

问题1:(Windows,docker,解决)
安装完docker之后,双击桌面菜单Boot2Docker Start显示打开方式,即无应用程序打开%boot2Docker%/start.sh文件。
原因分析
docker-install-1.8.exe包含三个部分:

Oracle VM VirtualBox
Git
Boot2Docker for Windows

双击桌面菜单Boot2Docker Start,实际上要自动执行boot2Docker安装目录下的start.sh文件。而.sh文件是需要使用安装的Git的命令执行的。Git默认安装在C:\Program Files (x86)\Git,使用git执行sh文件的命令git以下程序:C:\Program Files (x86)\Git\bin\sh.exe。

出现此问题的原因,应该是环境变量设置的问题。可能是在安装docker之前已安装的git导致。

解决方案

  • 在path系统环境变量中添加git的bin路径:C:\Program Files (x86)\Git\bin
  • 选择git安装路径bin目录下的sh.exe程序即可。

问题2:(Windows,docker,解决)
在window cmd提示下使用dokcer指令(如docker ps、docker info、docker version等)会提示如下错误

Get http://127.0.0.1:2375/v1.20/info: dial tcp 127.0.0.1:2375: ConnectEx tcp: No
connection could be made because the target machine actively refused it..
* Are you trying to connect to a TLS-enabled daemon without TLS?
* Is your docker daemon up and running?

解决方案

  1. 确保boot2docker启动
    使用boot2docker status显示running

  2. 设置变量(注:以下信息在在boot2docker启动时提示的内容,boot2docker启动命令是boot2docker start)

    set DOCKER_HOST=tcp://192.168.59.103:2376
    set DOCKER_CERT_PATH=C:\Users{UserName}.boot2docker\certs\boot2docker-vm
    set DOCKER_TLS_VERIFY=1

(注:这里只是设置的环境变量只是临时的,关闭cmd窗口后需要再次设置上面的环境变量。不想这么麻烦可将上面的直接添加到系统环境变量中)

问题3:(Ubuntu,compose,解决)
运行docker-compose up命令出现错误
client and server don't have same version (client : 1.21, server: 1.18)

解决方法:安装低版本docker-compose,或者安装最新版本的docker-Engine

# 更新docker-engine
sudo apt-get upgrade docker-engine
# 重启服务
sudo service docker restart

问题4:(ubuntu,compose,未解决)
在用docker-haproxy-web使用docker-compoise up运行时报错
ERROR: for haproxy create haproxy/haproxy.cfg: "haproxy/haproxy.cfg" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed

原因是docker-compose.yml的对volumes支持出现bug:不支持直接对文件挂载的数据卷

    volumes:
        - haproxy:/haproxy-override
        - haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy/haproxy.cfg:ro

修改为直接挂载目录即可

    volumes:
        - haproxy:/haproxy-override
        - haproxy:/usr/local/etc/haproxy:ro

* 但是又遇到了新的问题 *

问题5:(Windows,Compose,解决)
Windows文件目录如下(在virtualbox已经共享了windows的/c/users/目录

/c/users/admin/learning/composetest
  +-- docker-compose.yml
  +-- Dockerfile
  +-- requirement.txt
  +-- app.py

文件内容:
docker-compose.yml

web:
  build: .
  ports:
   - "5000:5000"
  volumes:
   - .:/code
  links:
   - redis
redis:
  image: redis

Dockerfile

FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python app.py

在Dockerfile文件中基于python:2.7镜像安装requirement.txt中的组件,构建成新镜像。compose文件利用新镜像挂载当前目录,在python app.py命令运行时能够找到app.py文件。

但是在Windows环境下运行命令docker-compose up -d,问题提示目录下找不到app.py文件。

实际上在运行docker-compose命令之前,在virutalbox虚拟主机boot2docker目录中/c/users/admin/learning/composetest能够看到上面四个文件,但是运行docker-compose命令之后,再查看此目录,目录存在但目录下四个文件不存在了(Windows下的文件相应文件仍存在)。

为什么docker-compose会屏蔽掉virtualbox的共享目录?

解决方案:重启主机docker-machine restart default

问题6:(Windows,Docker-Machine,解决)
使用docker-machine create -d virtualbox创建主机,提示要更新但又由于网络的某些原因无法下载导致的错误如下:

Running pre-create checks...
(manager) Default Boot2Docker ISO is out-of-date, downloading the latest release...
(manager) Latest release for github.com/boot2docker/boot2docker is v1.11.2
(manager) Downloading C:\Users\Administrator\.docker\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v
1.11.2/boot2docker.iso...
Error with pre-create check: "Get https://github-cloud.s3.amazonaws.com/releases/ 
...

即使也有问题。那么能否不更新呢?docker-machine没有提供这样的参数(反正目前我没找到)。

解决办法:把网络断掉,docker-machine就不会去检查boot2docker版本了!

你可能感兴趣的:(Docker)