Docker в Windows: сбой: container_linux.go: 344: запуск процесса контейнера вызвал "exec: \" ./ gradlew \ ": stat ./gradlew: такого файла или каталога нет" - PullRequest
0 голосов
/ 18 марта 2019

Вот оригинальная команда после первоначального поиска решения в сети.Я пробовал разные комбинации с использованием косой черты (/) напрасно:

winpty docker run --privileged --rm -it -v '//c//temp//git//distributions//cache://root//.gradle' --mount type=bind,source=//c//temp//git//distributions,target=//distdestiny_server.in.systems.com/x86/p83-buildenv './gradlew'
C:/Program Files/Docker Toolbox/docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"./gradlew\": stat ./gradlew: no such file or directory": unknown.

После дальнейшего поиска в Интернете я использовал различные варианты привязки и распространения для разных комбинаций, но в итоге получил эту ошибку:

winpty docker run --privileged --rm -it --mount type=bind,source=//c//temp//git//distributions//cache,target=//root//.gradle --mount type=bind,source=//c//temp//git//distributions,target=/dist,bind-propagation=shared destiny_server.in.systems.com/x86/p83-buildenv './gradlew'
C:/Program Files/Docker Toolbox/docker.exe: Error response from daemon: linux mounts: path /c/temp/git/distributions is mounted on / but it is not a shared mount.

Еще одна опция, с которой я столкнулся - это MountFlags.Однако в документации докера это только упоминается, но не указывается, где ее указывать.Я не мог найти способ указать это на cmd.линий.Я нахожу в Интернете ссылки на некоторые файлы, такие как Dockerfile, docer.service и т. Д. Однако я не могу найти ни один из этих файлов в моей системе.Нужно ли мне создавать рой, чтобы получить эти файлы?Единственный последний вариант, который у меня есть, - это использовать MountFlags, но не знаю, как и где его указать.

Сведения о Docker: я только что обновил Docker Client с 17.07.0-ce до 18.03.0-ce на своем рабочем столе, когда я набираю этот контент.Тем не менее у меня есть та же проблема, о которой сообщают

Из терминала быстрого запуска Docker:

$ docker version
Client:
 Version:       18.03.0-ce
 API version:   1.37
 Go version:    go1.9.4
 Git commit:    0520e24302
 Built: Fri Mar 23 08:31:36 2018
 OS/Arch:       windows/amd64
 Experimental:  false
 Orchestrator:  swarm

Server: Docker Engine - Community
 Engine:
  Version:      18.09.3
  API version:  1.39 (minimum version 1.12)
  Go version:   go1.10.8
  Git commit:   774a1f4
  Built:        Thu Feb 28 06:40:51 2019
  OS/Arch:      linux/amd64
  Experimental: false

Любая помощь в этом отношении очень полезна.Спасибо.

1 Ответ

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

Использование Docker в Windows чревато проблемами, связанными с путями. Похоже, вы падаете в одну из этих кроличьих норе. Предполагая, что .gradle является каталогом (он находится на моей машине):

Способ, который я решил, - это использование томов докера: тома отличаются от сопоставления дисков, которое вы используете в данный момент, поскольку файлы не будут отображаться в файловой системе хоста, но они сохраняются при выполнении контейнеров, чего часто достаточно. Например, у меня есть каталог /git, смонтированный из тома во всех моих инструментах разработки, который используется для получения исходного кода, клонированного из git. Если вам нужен доступ к этим файлам вне докера, то том может быть неудобным, но если вы используете gradle только внутри контейнера, а не на хосте, то вы можете сопоставить каталог .gradle с томом и просто повторно использовать его в разных контейнерах. .

Прежде чем вы сделаете это, рекомендуется явно создать том с:

 docker volume create gradle

Существуют различные техники, которые неявно создают объемы, но лично мне нравится быть явным из-за принципа наименьшего удивления.

Синтаксис для монтирования тома аналогичен тому, который вы использовали выше, но мы просто называем громкость слева от переключателя громкости:

docker container run -it --rm -v gradle:/root/.gradle/ ...

Возможно, другая проблема в вашей команде запуска Docker. В конце вы передаете строку './gradlew'. Вы предполагаете, что это находится в рабочем каталоге, что может быть проблемой, если рабочий каталог не тот, о котором вы думаете. Чтобы этого не произошло, вы должны указать рабочий каталог с помощью ключа -w <dir>. Что-то вроде:

docker container run -it --rm -w /root /v gradle:/root/.gradle/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...