在Windows上从Bash运行Docker
Docker需要访问相当多的系统调用,这些调用不一定都是在Windows上实现的,因此在WSL下Docker可能并不那么容易,相反,我可以在Windows上运行Docker Engine,并从Bash连接到Docker 。
1.在Windows上安装Docker
要在Windows上安装Docker引擎,只需访问docker.com并下载相应的发行版(win10下载docker for windows)。此外,请确保已启用硬件虚拟化并安装Hyper-V,以免引擎无法启动。
一、从Bash运行Windows可执行文件。只需将这两行添加到您的.bashrc
(并重新加载您的环境)
export PATH="$HOME/bin:$HOME/.local/bin:$PATH"
export PATH="$PATH:/mnt/c/Program\ Files/Docker/Docker/resources/bin"
alias docker=docker.exe
alias docker-compose=docker-compose.exe
你现在可以docker --version
从Bash 运行
二、在WSL上安装Docker,Ubuntu系统的安装方法如下
# Install packages to allow apt to use a repository over HTTPS
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# Add Docker's official GPG key
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# Set up the repository
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# Update source lists
sudo apt-get update
# Install Docker
sudo apt-get install docker-ce
现在已经在Windows和WSL上安装了Docker引擎,但它们都没有启动。
windows的docker只要点击快捷方式启动,启动后在PowerShell上执行命令如下:
PS C:\> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
WSL上的Docker启动不了,bash命令如下
$ service docker start
docker: unrecognized service
$ docker images
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
将WSL上的Docker连接到Windows上的Docker
docker
在另一台机器上运行实际上非常简单,因为Docker公开了CLI可以附加到的TCP端点。端点使用TLS,这意味着我们必须在WSL端设置客户端以识别Windows端Docker机器使用的证书,运行如下命令
$ export DOCKER_HOST=tcp://192.168.99.100:2376 // your Docker IP
$ export DOCKER_CERT_PATH=/mnt/c/Users/YOUR_USERNAME/.docker/machine/certs
$ export DOCKER_TLS_VERIFY=1
完成后,我们需要做的就是将Bash下的CLI连接到在Windows下运行的引擎,而不是连接到在Bash下不能运行的dockers,如下所示:
$ docker -H tcp://0.0.0.0:2376
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
如果不是使用TLS,不使用证书,要公开没有TLS的守护进程。此步骤是必需的,以便守护程序在TCP端点上进行侦听。如果你不这样做,那么你将无法从WSL连接,所以为了让客户端和docker通信,必须打开以下黄色背景的选项!操作如下截图
您可能还想共享您的驱动器(土话:盘符)。这一步不是必须的,但如果需要用到某个盘符的文件,建议勾选对应选项,转到“共享驱动器(Shared Drives)”设置并启用它。
将WSL配置为连接到Docker for Windows
执行命令:export DOCKER_HOST=tcp://127.0.0.1:2375
现在执行docker命令不会再出现以下提示:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
但是,该环境变量只会持续到会话结束。每次打开bash时都必须重新设置它。因此,为了避免这种情况,您需要在主目录中的一个名为.bash_profile或者 .bashrc的文件中设置该变量,
这两个文件只支持ssh命令终端用vi打开
在FileZilla文件访问软件是无法找到的
打开这两个文件中有数据的那个并在结尾处添加
保存后重新启动bash控制台执行docker相关命令可以照常执行了。
参考博文:
1、在Linux的Windows子系统上(WSL)使用Docker(Ubuntu)
2、https://blog.jayway.com/2017/04/19/running-docker-on-bash-on-windows/