在实践过程中遇到的一些问题。有些问题很奇怪,找不到原因——可见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?
解决方案
确保boot2docker启动
使用boot2docker status显示running设置变量(注:以下信息在在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版本了!