невозможно создать конкретный файл Docker

88

Я могу создать Dockerfile, например

docker build -t deepak/ruby .

Но для файла Dockerfile без имени Dockerfile

# DOCKER-VERSION 0.4.8

FROM deepak/ruby

MAINTAINER Deepak Kannan "deepak@example.com"

RUN ./bin/rails s

допустим, это называется, Dockerfile.app что мы строим с

docker build -t deepak/app Dockerfile.app

тогда я получаю ошибку

Uploading context 0 bytes
Error build: EOF
EOF
дипак
источник
15
Итак, ваш вопрос: как мне создать dockerfile, если имя dockerfile не Dockerfile?
Ken Cochrane
1
@KenCochrane, да. вот в чем вопрос
дипак 08
1
Если вы запустите, docker build --helpесть строка, в которой вы можете найти то, что ищете: -f, --file string Имя Dockerfile (по умолчанию 'PATH / Dockerfile')
blasrodri
2
Вы изучали Docker в 2013 году. Это предвидение.
mcan

Ответы:

210

Обратите внимание на точку .в конце обеих команд.

docker build -f MyDockerfile.

Или с тегом:

docker build -t mysuperimage -f MyDockerfile.

Анджей Реманн
источник
1
docker build -f Dockerfile.consumerвыдает ошибку "docker build" требует ровно 1 аргумент. См. Docker build --help. Использование: сборка докеров [ОПЦИИ] ПУТЬ | URL | -
камал 08
12
@kamal вы заметили точку ( .) в конце приведенной выше команды?
Сатиш Паголу
7
Просто говорю - требуется добавить. просто раздражает
myloginid
2
Это .не обязательная вещь. Команда сборки принимает два аргумента, а именно. путь к Dockerfile& путь к contextкаталогу. Итак, мы можем сделатьdocker build -t mysupertag -f ./foo/Dockerfile ./foo
Mohnish
22

Последний параметр docker build - это путь сборки, когда вы .его вводите, это означает, что это путь, по которому вы найдете файл Dockerfile. Когда вы измените его на Dockerfile.appнего, он попытается найти Dockerfile.app/Dockerfile, что неверно.

Я не уверен, будет ли это работать, но раньше вы могли это сделать.

$ docker build -t deepak/app - < Dockerfile.app

Попробуйте это и посмотрите, поможет ли это, если нет, возможно, откройте проблему с докером, чтобы снова добавить эту функцию, или обновите документацию о том, как использовать Dockerfile с другим именем.

Подробнее здесь: http://docs.docker.io/en/latest/commandline/command/build/

Кен Кокрейн
источник
1
Я пробовал URL-адрес, и он работает. Путь также должен работать в соответствии с документами. сообщит об ошибке.
deepak 08
5
согласно документам, которыми вы поделились (спасибо). docker build - < Dockerfileне позволит мне ДОБАВИТЬ локальный файл. Но попробовал, и он работает
дипак
2
но я хочу предоставить другой Dockerfile и все еще иметь контекст, т.е. Добавить файлы. так что я
запишу
Это просто создаст контекст с одним Dockerfile в нем. Все вспомогательные файлы не попадут в контекст.
itsafire
12

Попробуйте dockerfeed . Он использует функцию докера для создания контекста через stdin. Я написал сценарий для решения именно вашей проблемы, с которой столкнулся сам.

Чтобы заменить Dockerfile на другой, сделайте это так:

dockerfeed -d Dockerfile.app . | docker build -t deepak/ruby -

И вуаля. Dockerfeed делает то же самое, что и docker build. Он упаковывает исходный код со своим Dockerfile, но позволяет вам заменить старый Dockerfile на нужный. При этом файлы не создаются, источник не изменяется. Сгенерированный tar-архив передается в докер, который, в свою очередь, отправляет его демону докера.

Обновление: это был правильный ответ в старые времена, когда -fпереключателя не было. В докере версии 1.5 эта опция была представлена. Теперь вы можете создать другой Dockerfile следующим образом:

docker build -f other-Dockerfile .
itsafire
источник
5

Вы также можете добиться этого с помощью docker-compose.

В вашем docker-compose.yml в разделе сборки вы можете указать каталог, в котором вы храните файл dockerfile, и его альтернативное имя, как показано ниже:

build:
  context: "/path/to/docker/directory"
  dockerfile: "dockerfile-alternate-name"

докер-сочинять

вал
источник
0

Предположим, вы успешно установили docker toolbox, включая docker-compose и docker-machine . Это мой docker-compose.yml

version: '2'
services: 
  web: ./www/python
  ports:
   - "5000:5000"

И это в Dockerfile

FROM python:3.4-alpine
ADD ./www/python /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

Убедитесь, что эти файлы находятся точно в корневой папке. Когда вы запускаете docker-compose up, вы собираетесь создать образ для Интернета.

Фарис Райхан
источник
0

Мой случай находится в /tmpкаталоге, и там много файлов, и докер попробуйте с другими файлами, хотя я передаю-f <Dockerfile.foo>

Самое простое и понятное (для меня) решение - это dockerfeed ответы сверху):

cat DockerFile.debian.foo | docker build -t debian.foo -
tres.14159
источник
0

Пользователь Windows должен попробовать следующую команду:

docker build -f absolute_docker_file_path точка

например :

docker build -f D: \ Code \ core-api \ API_TEST.Dockerfile.

Нихил Вац
источник