启动Docker容器时出错(WSL,docker-ce,Ubuntu 16.04)

时间:2018-09-25 09:16:25

标签: ubuntu-16.04 windows-subsystem-for-linux docker-windows

Microsoft Windows [版本10.0.17134.285], Ubuntu 16.04(WSL), docker-ce(稳定)

我正在按照此处的说明进行操作- https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawless 。我选择了“稳定”而不是“优势”。我手动安装了c驱动器映射

  sudo mkdir / c
须藤挂载--bind / mnt / c / c
 

而不是WSL配置文件方式,因为我不确定我是否希望将其用于所有WSL实例。除此之外,我还按照说明进行操作。

我已经通过以下方式启动了Docker守护进程

  sudo cgroupfs-mount
须藤dockerd -H tcp://0.0.0.0:2375 --tls = false
 

当我尝试使用以下容器启动容器时

  docker run -d -p 27017:27017 --name testDB mongo:3.4
 

我知道

  docker:来自守护程序的错误响应:OCI运行时创建失败:container_linux.go:348:启动容器进程引起了“ process_linux.go:402:容器初始化引起了\” rootfs_linux.go:46:准备rootfs引起了\ \\“无效的参数\\\” \“”:未知。
 

,并且我无法使用 localhost:27017 连接到容器上的MongoDB。

  docker ps -a
 

显示

 容器ID图像命令创建的状态端口名称
e115d1c409a3 mongo:3.4“ docker-entrypoint.s…” 6秒前创建0.0.0.0:27017->27017/tcp testDB
 

  docker信息
 

显示

 容器:1
 跑步:0
 已暂停:0
 已停止:1
图片:1
伺服器版本:18.06.1-ce
存储驱动程序:overlay2
 支持文件系统:<未知>
 支持d_type:true
 本机覆盖差异:true
记录驱动程序:json-file
Cgroup驱动程序:cgroupfs
外挂程式:
 数量:本地
 网络:网桥主机macvlan空覆盖
 日志:awslogs流利的gcplogs gelf记录了json文件的日志条目splunk syslog
群:无效
运行时:runc
默认运行时:runc
初始化二进制文件:docker-init
容器版本:468a545b9edcd5932818eb9de8e72413e616e86e
runc版本:69663f0bd4b60df09991c08812a60108003fa340
初始化版本:fec3683
内核版本:4.4.0-17134-Microsoft
作业系统:Ubuntu 16.04.5 LTS
OSType:Linux
架构:x86_64
处理器:8
总内存:15.9GiB
名称:DESKTOP-4F100D9
ID:EFH2:O3RT:3OO4:27P5:ZNK7:N5JW:WE5M:4VSK:QREN:YCV4:GSYG:ZDTR
Docker根目录:/ var / lib / docker
调试模式(客户端):false
调试模式(服务器):false
注册表:https://index.docker.io/v1/
标签:
实验性:错误
不安全的注册表:
 127.0.0.0/8
启用实时还原:false

警告:不支持内存限制
警告:不支持交换限制
警告:不支持内核内存限制
警告:没有oom kill禁用支持
警告:不支持cpu cfs配额
警告:不支持cpu cfs期间
警告:不支持CPU共享
警告:不支持cpuset
 

任何想法我做错了什么以及如何解决?

(我需要在Linux(WSL)下运行Docker-我无法在Windows上使用Docker,因为我们使用的是VirtualBox,并且Hyper-V已禁用)

2 个答案:

答案 0 :(得分:1)

当前,您不能直接从WSL使用docker守护程序。有几个问题,主要是与网络有关。它仅适用于像hello world(Reddit topic)这样的简单图像

您可以做的是在Windows中将WSL连接到docker守护程序。因此,按照本教程进行操作,您提到的还不错,但是如果使用VirtualBox运行它,则必须启动default计算机,或者创建并启动新计算机。这台docker机器将成为您的守护程序。

默认情况下,docker-machine命令在WSL中无法正常工作,但是您可以通过将以下代码放入例如来使它起作用。 〜/ .bashrc文件

# Ability to run docker-machine command properly from WSL
function docker-machine()
{
    if [ $1 == "env" ]; then
            docker-machine.exe $1 $2 --shell bash | sed 's/C:/\/c/' | sed 's/\\/\//g' | sed 's:#.*$::g' | sed 's/"//g'
            printf "# Run this command to configure your shell:\n"
            printf "# eval \"\$(docker-machine $1 $2)\"\n"
    else
            docker-machine.exe "$@"
    fi
}
export -f docker-machine

运行source ~/.bashrc或重新打开bash之后,您可以运行:

  • docker-machine start default-将启动计算机
  • eval $(docker-machine env default)-将您的bash会话连接到计算机

然后您应该能够运行所有docker之类的东西

  • docker ps
  • docker run -it alpine sh
  • docker build

docker计算机将一直运行,直到您停止它或关闭PC为止。如果您打开一个新的bash会话(窗口),则只需运行eval $(docker-machine env default)即可将新会话连接到计算机。

希望有帮助。 :)

答案 1 :(得分:0)

这是一个简单的解决方案,而是在WSL中的Windows上使用Docker。

只需将以下内容添加到您的WSL .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

参考:https://blog.jayway.com/2017/04/19/running-docker-on-bash-on-windows/