Ошибка запуска контейнера Docker (WSL, docker-ce, Ubuntu 16.04) - PullRequest
0 голосов
/ 25 сентября 2018

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-flawlessly. Я выбрал "стабильный", ачем "край".Я подключил сопоставление дисков c вручную с помощью

sudo mkdir /c
sudo mount --bind /mnt/c /c

, а не с помощью файла конфигурации WSL, потому что я не был уверен, хочу ли я его для ВСЕХ своих экземпляров WSL.Кроме этого, я следовал инструкциям.

Я запустил демон Docker с

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

Когда я пытаюсь запустить свой контейнер с

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

, я получаю

docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:46: preparing rootfs caused \\\"invalid argument\\\"\"": unknown.

и я не могу подключиться к MongoDB на контейнере, используя localhost:27017.

docker ps -a

, показывает

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
e115d1c409a3        mongo:3.4           "docker-entrypoint.s…"   6 seconds ago       Created             0.0.0.0:27017->27017/tcp   testDB

и

docker info

показывает

Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 1
Server Version: 18.06.1-ce
Storage Driver: overlay2
 Backing Filesystem: <unknown>
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Kernel Version: 4.4.0-17134-Microsoft
Operating System: Ubuntu 16.04.5 LTS
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 15.9GiB
Name: DESKTOP-4F100D9
ID: EFH2:O3RT:3OO4:27P5:ZNK7:N5JW:WE5M:4VSK:QREN:YCV4:GSYG:ZDTR
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: No memory limit support
WARNING: No swap limit support
WARNING: No kernel memory limit support
WARNING: No oom kill disable support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
WARNING: No cpu shares support
WARNING: No cpuset support

Есть идеи, что я сделал не так и как это исправить?

(мне нужно запустить Docker под Linux (WSL) - я не могу использовать Docker для Windows, потому чтомы используем VirtualBox, а Hyper-V отключен)

Ответы [ 2 ]

0 голосов
/ 09 марта 2019

Это простое решение, которое вместо этого использует Docker на окнах в WSL.

Просто добавьте следующее в ваш файл 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/

0 голосов
/ 23 октября 2018

В настоящее время вы не можете использовать демон docker напрямую из WSL.Есть несколько проблем, в основном с сетью.Он работает только для простых изображений, таких как hello world ( Тема Reddit )

Что вы можете сделать, это подключиться из WSL к демону Docker в Windows.Итак, следуя руководству, вы упомянули, что все в порядке, но если вы используете его с VirtualBox, вам нужно либо запустить default машину, либо создать и запустить новую.Этот докер будет вашим демоном.

По умолчанию команда docker-machine работает неправильно в WSL, но вы можете заставить ее работать, поместив этот код, например, в ~ / .bashrc file

# 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 ps
  • docker run -it alpine sh
  • docker build
  • и т. Д.

Докер будет работать до тех пор, пока вы не остановите его или не выключите компьютер.Если вы открываете новый сеанс bash (окно), вам нужно просто запустить eval $(docker-machine env default), чтобы подключить новый сеанс к компьютеру.

Надеюсь, это поможет.:)

...