最近公司涉及到對docker容器引擎的使用,所以就在網上各種搜索,由於是win7系統,所以在使用上更是麻煩,遇到各種錯誤就是無法成功啟動docker,經過兩天的各種嘗試下,終於安裝成功,在此記錄一下使用過程和遇到的問題。
一 、下載Docker安裝包
1.系統為win10,max :https://www.docker.com/get-started
2.系統為其他就版本如win7,win8等就需要下載Docker Toolbox:https://github.com/docker/toolbox/releases
本人使用的Docker Toolbox是DockerToolbox-18.09.3這個版本:
鏈接:https://pan.baidu.com/s/1gVLNhlQ5QGKP-vZ-6ER0WQ
提取碼:dkud
下載時需要勾選電腦中未安裝的環境,如git,特別是oracle VM VirtualBox(創建虛擬機的必要條件,在win10下則使用系統自帶的hyper-v)等
安裝完成后有一個 Docker Quickstart Terminal 程序,如果一切就緒直接啟動就可以用了。
二 、docker的使用指南
參考官網:https://docs.docker.com/get-started/
下面是對docker run hello-world執行成功的情況。
Docker Quickstart Terminal工具啟動成功
cmd中啟動也成功了
oracle VM VirtualBox啟動成功
三 、我使用中遇到的問題
1.未能找到路徑文件問題
無法找到C:\Users\Administrator\.docker\machine\machines\default\config.json配置文件
無法找到C:\Users\Administrator\.docker\machine\machines\default\ca.pem證書等
本來是打算在網上搜一個配置文件放進去,可是半天也沒有相關的問題,最后發現配置全都在路徑C:\Users\Administrator\.docker\machine\machines\mh-keystore下面,果斷將所有配置全部Copy到default中
附上docker 的config.json配置文件和ca.pem證書文件
鏈接:https://pan.baidu.com/s/1s6iH66WG5YH78Sp9hyyBOA
提取碼:2h9g
2.由於網絡配置問題oracle VM VirtualBox無法正常啟動
在設置中找一個可用的網絡
3.報錯docker daemon is not running. --未開啟守護進程
嘗試無果:docker-machine env default
在下載DockerToolbox-18.09.3.exe版本重新安裝並解決文件路徑問題后搞定,之前的版本是在官網https://docs.docker.com/toolbox/overview/下載的,並且有max工具
4.Error checking TLS connection: ssh command error: --未找到SSH證書
$ docker-machine env default
Error checking TLS connection: ssh command error:
command : ip addr show
err : exit status 255
output :
嘗試無果:docker-machine regenerate-certs default
在下載DockerToolbox-18.09.3.exe版本重新安裝並解決文件路徑問題后搞定,之前的版本是在官網https://docs.docker.com/toolbox/overview/下載的,並且有max工具
5.關於工具的介紹可以參考官網
https://docs.docker.com/toolbox/toolbox_install_windows/
6.error during connect: Get https://192.168.99.100:2376/v1.37/images/json?all=1: d
ial tcp 192.168.99.100:2376: connectex: A connection attempt failed because the
connected party did not properly respond after a period of time, or established
connection failed because connected host has failed to respond.
是由於虛擬機未開啟,可以直接在Oracle VM VirtualBox開機(前提你要知道那個是默認的虛擬機)、或者直接使用命令 docker-machine.exe restart default 運行默認虛擬機
7.其它錯誤
示例錯誤
嘗試連接到計算機(例如docker-machine env default
)或從Docker Hub(如同docker run hello-world
)中提取圖像時,可能會出錯。
您獲得的錯誤可能特定於證書,如下所示:
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.100:2376": dial tcp 192.168.99.100:2376: i/o timeout
其他人明確建議重新生成證書:
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.100:2376": x509: certificate is valid for 192.168.99.101, not 192.168.99.100
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which will stop running containers.
或者,指示網絡超時,如下所示:
bash-3.2$ docker run hello-world
Unable to find image 'hello-world:latest' locally
Pulling repository docker.io/library/hello-world
Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/hello-world/images. You may want to check your internet connection or if you are behind a proxy.
bash-3.2$
解決方案
以下是一些快速解決方案,可幫助我們重回正軌。這些示例假設Docker主機是一台名為的機器default
。
重新生成證書
某些錯誤明確告訴您重新生成證書。您也可以嘗試使用其他與證書和/或連接相關的錯誤。
$ docker-machine regenerate-certs default
Regenerate TLS machine certs? Warning: this is irreversible. (y/n): y
Regenerating TLS certificates
重新啟動DOCKER主機
$ docker-machine restart default
機器啟動后,為命令窗口設置環境變量。
$ eval $(docker-machine env default)
運行docker-machine ls
以驗證計算機是否正在運行,並且此命令窗口已配置為與其通信,如活動計算機的星號(*)所示。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.101:2376 v1.10.1
停止機器,將其移除,然后創建一個新機器。
$ docker-machine stop default
Stopping "default"...
Machine "default" was stopped.
$ docker-machine rm default
About to remove default
Are you sure? (y/n): y
Successfully removed default
您可以將該docker-machine create
命令與virtualbox
驅動程序一起使用來創建一個名為default
(或任何您想要的機器名稱)的新機器。
$ docker-machine create --driver virtualbox default
Running pre-create checks...
(default) Default Boot2Docker ISO is out-of-date, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v1.10.1
(default) Downloading
...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env default
設置命令窗口的環境變量。
$ eval $(docker-machine env default)
運行docker-machine ls
以驗證新計算機是否正在運行,並且此命令窗口已配置為與其通信,如活動計算機的星號(*)所示。
HTTP代理和連接錯誤
HTTP代理可能導致特殊品牌的連接錯誤。如果在使用使用HTTP代理(例如公司網絡)的虛擬專用網絡(VPN)的系統上安裝Docker Toolbox,則在客戶端嘗試連接到服務器時可能會遇到錯誤。
以下是此類錯誤的示例:
$ docker run hello-world
An error occurred trying to connect: Post https://192.168.99.100:2376/v1.20/containers/create: Forbidden
$ docker run ubuntu echo "hi"
An error occurred trying to connect: Post https://192.168.99.100:2376/v1.20/containers/create: Forbidden
在Docker計算機上配置HTTP代理設置
當工具箱創建虛擬機(VM)運行start.sh
,這樣會很值HTTP_PROXY
,HTTPS_PROXY
和NO_PROXY
,並將它們作為create
選項來創建的default machine
。
您可以在已創建的Docker計算機(例如計算機)上為專用網絡重新配置HTTP代理設置default
,然后在不同網絡上使用同一系統時更改配置。
或者,您可以通過/var/lib/boot2docker/profile
VM內部的配置文件手動修改計算機上的代理設置,或將代理設置配置為docker-machine create
命令的一部分。
兩種解決方案如下所述。
在DOCKER機器上更新/ VAR / LIB / BOOT2DOCKER / PROFILE
解決此問題的一種方法是更新/var/lib/boot2docker/profile
現有計算機上的文件以指定所需的代理設置。
此文件存在於VM本身,因此您需要ssh
進入計算機,然后在那里編輯並保存文件。
您可以將計算機地址添加為NO_PROXY
設置的值,還可以指定您想要使用的代理服務器。通常設置Docker機器URL以NO_PROXY
解決此類連接問題,因此此處顯示了示例。
- 使用
ssh
登錄到虛擬機。此示例登錄到default
計算機。$ docker-machine ssh default docker@default:~$ sudo vi /var/lib/boot2docker/profile
- 將
NO_PROXY
設置添加到文件末尾,類似於以下示例。# replace with your office's proxy environment export "HTTP_PROXY=http://PROXY:PORT" export "HTTPS_PROXY=http://PROXY:PORT" # you can add more no_proxy with your environment. export "NO_PROXY=192.168.99.*,*.local,169.254/16,*.example.com,192.168.59.*"
- 重啟Docker。修改
profile
VM后,重新啟動Docker並注銷計算機。docker@default:~$ sudo /etc/init.d/docker restart docker@default:~$ exit
重試Docker命令。Docker和Kitematic現在都應該正常運行。
當您移動到其他網絡(例如,離開辦公室的公司網絡並返回主頁)時,刪除或注釋掉這些代理設置/var/lib/boot2docker/profile
並重新啟動Docker。
使用--ENGINE ENV手動創建計算機以指定代理設置
您可以default
使用該docker-machine create
命令手動刪除它們並使用該命令手動創建計算機,而不是重新配置自動創建的計算機,而是使用該--engine env
標志指定所需的代理設置。
以下是創建default
代理設置為http://example.com:8080
和的機器的示例https://example.com:8080
,以及N0_PROXY
服務器的設置example2.com
。
docker-machine create -d virtualbox \
--engine-env HTTP_PROXY=http://example.com:8080 \
--engine-env HTTPS_PROXY=https://example.com:8080 \
--engine-env NO_PROXY=example2.com \
default
其它錯誤出自官網:https://docs.docker.com/toolbox/faqs/troubleshoot/
本來都打算放棄了,環境配置每次都讓人頭疼,再堅持一下,總會有辦法的,哈哈。