/ / Как да монтирам том на Docker, докато използвам хост на Windows? - windows, docker, контейнери, том, boot2docker -

Как да монтирам том на Docker, докато използвам хост на Windows? - прозорци, докер, контейнери, обем, boot2docker

Монтирането на том на Docker, докато бях под хост на Windows, представляваше огромна мъка за мен и не успях да го накарам да работи.

В момента имам следния прост Dockerfile:

FROM php:5-apache
RUN apt-get update

Когато изграждам изображение от него и стартирам контейнер

docker build -t phisch:dev .
docker run phisch:dev

контейнерът стартира правилно.

Но когато се опитвам да монтирам том,

docker run -v /c/Users/phisch/dev/htdocs:/var/www phisch:dev

ще се покаже следното съобщение:

C:Usersphischdev>docker run -v /c/Users/phisch/dev/htdocs:/var/www phisch:dev
no such file or directory
docker: Error response from daemon: Container command not found or does not exist..

Най- /var/www директория определено съществува в контейнера и опитването на други директории не променя резултата. Предварителното добавяне на наклонена черта към директорията от страната на хоста също не помага. (//c/Users/phisch/dev/htdocs)

Как да монтирам например /var/www да се C:/Users/phisch/dev/htdocs?

phisch@DESKTOP-UC1LB9J MINGW64 ~/dev (master)
$ docker inspect phisch:dev
[
{
"Id": "sha256:73c1533222a905a378f12505ccbd9e9b34cde5a4b34ed008c39e23d5d58a9c91",
"RepoTags": [
"dev_web:latest",
"phisch:dev",
"phisch:dev3"
],
"RepoDigests": [],
"Parent": "sha256:d2c4149d86c4dfceaff0e9c4eb5a5d42ca7815f81dd08baad4dc8bda6db2fb10",
"Comment": "",
"Created": "2016-02-10T12:16:37.667236134Z",
"Container": "dad811f51ef3b94d9845d13a0e43ad07ccd5684ea2747b3846accdc71abeb628",
"ContainerConfig": {
"Hostname": "e06f5a03fe1f",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"PHP_INI_DIR=/usr/local/etc/php",
"PHP_EXTRA_BUILD_DEPS=apache2-dev",
"PHP_EXTRA_CONFIGURE_ARGS=--with-apxs2",
"GPG_KEYS=0BD78B5F97500D450838F95DFE857D9A90D90EC1 6E4F6AB321FDC07F2C332E3AC2BF0BC433CFC8B3",
"PHP_VERSION=5.6.18",
"PHP_FILENAME=php-5.6.18.tar.xz",
"PHP_SHA256=54dd9106c3469bc7028644d72ac140af00655420bbaaf4a742a64e9ed02ec1b0"
],
"Cmd": [
"/bin/sh",
"-c",
"apt-get update"
],
"ArgsEscaped": true,
"Image": "sha256:d2c4149d86c4dfceaff0e9c4eb5a5d42ca7815f81dd08baad4dc8bda6db2fb10",
"Volumes": null,
"WorkingDir": "/var/www/html",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"DockerVersion": "1.10.0",
"Author": "",
"Config": {
"Hostname": "e06f5a03fe1f",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"PHP_INI_DIR=/usr/local/etc/php",
"PHP_EXTRA_BUILD_DEPS=apache2-dev",
"PHP_EXTRA_CONFIGURE_ARGS=--with-apxs2",
"GPG_KEYS=0BD78B5F97500D450838F95DFE857D9A90D90EC1 6E4F6AB321FDC07F2C332E3AC2BF0BC433CFC8B3",
"PHP_VERSION=5.6.18",
"PHP_FILENAME=php-5.6.18.tar.xz",
"PHP_SHA256=54dd9106c3469bc7028644d72ac140af00655420bbaaf4a742a64e9ed02ec1b0"
],
"Cmd": [
"apache2-foreground"
],
"ArgsEscaped": true,
"Image": "sha256:d2c4149d86c4dfceaff0e9c4eb5a5d42ca7815f81dd08baad4dc8bda6db2fb10",
"Volumes": null,
"WorkingDir": "/var/www/html",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 491287784,
"VirtualSize": 491287784,
"GraphDriver": {
"Name": "aufs",
"Data": null
}
}
]

Оказва се директорията от страна на контейнера /var/www трябва да е празно, тъй като е имало поддиректория www. Docker не успя да го използва като точка за монтаж.

Отговори:

4 за отговор № 1

Възможно е / се интерпретира като опция от черупката на CMD Windows.

Опитайте първо ssh по подразбиране на докер-машина, за да отворите ssh сесия във вашата VM. От там опитайте да стартирате докера отново: docker run -v /c/Users/phisch/dev/htdocs:/var/www phisch:dev

Както коментира thaJeztah в брой 18290:

Можете да обмислите използването докер-ново съобщение; docker-compose ви позволява да дефинирате обвързани обеми спрямо местоположението на docker-compose.yml файл.
Използвайки a docker-compose файл ви позволява да посочите всички опции, необходими за стартиране на вашите контейнери в един файл, което го прави идеален за споделяне между членовете на екипа (т.е. просто изпълнете docker-compose up -d ще стартира всички контейнери за проекта с правилните опции).

Този коментар споменава & добавяне на секунда /:

docker run -v //c/Users/phisch/dev/htdocs:`/var/www` phisch:dev

Дори в сесията на чекмеджета msys на панела с инструменти на докера има проблеми (като брой 282)


След продължителна дискусия въпросът беше в това /var/www имаше папка в нея.

Монтаж /c/Users/phisch/dev/htdoc върху празна папка работи, но може да не даде очаквания резултат, тъй като CMD по подразбиране apache2-foreground все още може да обслужва съдържанието му въз основа на /var/www (което не би имало htdocs съдържание, ако това htdocs е монтиран в друга папка).


3 за отговор № 2

Ако говорим за Docker в Windows, трябва да вземем предвид факта, че всички контейнери се изпълняват на VirtualBox.

Преди да монтираме том към контейнер, трябва да сме сигурни, че определена папка е достъпна за VirtualBox.

Първо, за да дефинирате името на текущата работеща Docker машина, стартирайте

$ docker-machine.exe  active
default

На второ място, добавете споделена папка към VirtualBox:

$ VBoxManage sharedfolder add default --name "some_project" --hostpath D:Projectssome_project

Трето, създайте папката

$ docker-machine.exe ssh default "sudo mkdir --parents /d/projects/some_project"

Четвърто, монтирайте го:

$ docker-machine.exe ssh default "sudo mount -t vboxsf some_project /d/projects/some_project"

И накрая, създайте контейнер:

$ docker run -v //d/projects/some_project://d/projects/some_project -d some-image_name

1 за отговор № 3

Използвам Docker за Windows с PowerShell и използвам $PWD да се позова на текущата директория при монтиране на том и това работи добре за мен. Няколко примера:

docker run -p 2368:2368 -v $PWD/ghost:/var/lib/ghost -d ghost

docker run -p 2368:2368 -v $PWD/:/var/lib/ghost -d ghost