Ответ 1
Обратите внимание, что есть точка .
в конце обеих команд.
сборка докера -f MyDockerfile.
Или с тегом:
сборка докера -t mysuperimage -f MyDockerfile.
Я могу построить файл Docker, например
docker build -t deepak/ruby .
Но для файла Docker, который не называется Dockerfile
# DOCKER-VERSION 0.4.8
FROM deepak/ruby
MAINTAINER Deepak Kannan "[email protected]"
RUN ./bin/rails s
скажем, он называется Dockerfile.app
который мы строим с помощью
docker build -t deepak/app Dockerfile.app
то я получаю ошибку
Uploading context 0 bytes
Error build: EOF
EOF
Обратите внимание, что есть точка .
в конце обеих команд.
сборка докера -f MyDockerfile.
Или с тегом:
сборка докера -t mysuperimage -f MyDockerfile.
Последний параметр для сборки докеров - это путь сборки, когда вы помещаете .
, это означает, что это путь, где вы найдете Dockerfile
. Когда вы измените его на Dockerfile.app
, он попытается найти Dockerfile.app/Dockerfile
, что неверно.
Я не уверен, что он все равно будет работать, но вы могли это сделать.
$ docker build -t deepak/app - < Dockerfile.app
Попробуйте и посмотрите, поможет ли она, если нет, возможно, открыть проблему докера, чтобы добавить эту функцию или обновить документацию о том, как использовать файл Docker с другим именем.
Дополнительная информация здесь: http://docs.docker.io/en/latest/commandline/command/build/
Это работает
docker build doronaviguy/helloworld -f SomeDockerFile .
Попробуйте dockerfeed. Он использует функцию docker для создания контекста через stdin. Я написал сценарий для решения именно вашей проблемы, с которой я столкнулся.
Чтобы заменить Dockerfile другим, вы делаете это так:
dockerfeed -d Dockerfile.app . | docker build -t deepak/ruby -
И вуаля. Dockerfeed делает то же самое, что и docker build
Docker. Он упаковывает исходный код в свой Dockerfile, но позволяет вам заменить старый Dockerfile на нужный. В процессе не создаются файлы, источник не изменяется. Созданный архив tar отправляется в Docker, который, в свою очередь, отправляет его демону Docker.
Обновление: Это был правильный ответ в старые времена, когда не было -f
переключателя -f
. С версией докера 1.5 эта опция была введена. Теперь вы можете создать другой Dockerfile, например так:
docker build -f other-Dockerfile .
Вы можете добиться этого и с помощью компоновки docker.
В вашем docker-compose.yml в разделе сборки вы можете указать каталог, в котором вы храните свой файл докеров и его альтернативное имя, как показано ниже:
build:
context: "/path/to/docker/directory"
dockerfile: "dockerfile-alternate-name"
Предположим, что вы успешно установили панель инструментов docker, включая docker-compose и docker-machine. Это мой докер-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, вы создадите образ для Интернета.
Мой случай находится в каталоге /tmp
и есть много файлов и попыток докера с другими файлами, хотя я -f <Dockerfile.foo>
Наиболее чистое и простое (для меня) решение - это (среди ответов dockerfeed
сверху):
cat DockerFile.debian.foo | docker build -t debian.foo -