не вдається створити конкретний файл Docker


88

Я можу побудувати файл Docker, як

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
Отже, ваше запитання полягає в тому, як мені створити файл docker, якщо ім'я файлу docker не є Dockerfile?
Ken Cochrane

1
@KenCochrane так. це питання
deepak

1
Якщо ви запустите docker build --help, є рядок, де ви зможете знайти те, що шукаєте: -f, --file рядок Назва файлу Docker (за замовчуванням - '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 | -
kamal

12
@kamal ви помітили крапку ( .) у кінці наведеної вище команди?
Сатеш Паголу

7
Просто кажу - вимагаю додати. просто дратує
мілогінід

2
Це .не є обов’язковою річчю. Команда build приймає два аргументи, а саме. шлях до Dockerfile& шлях до contextкаталогу. Отже, ми можемо це зробитиdocker build -t mysupertag -f ./foo/Dockerfile ./foo
Моніш


22

Останнім параметром для збирання докера є шлях збірки, коли ви вводите .це означає, що це шлях, де ви знайдете Dockerfile. Коли ви його зміните, він Dockerfile.appспробує шукати Dockerfile.app/Dockerfile, що неправильно.

Я не впевнений, що це все одно буде працювати, але раніше ви могли це робити.

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

Спробуйте це і перевірте, чи допомагає це, якщо ні, можливо, відкрийте проблему докера, щоб знову додати цю функцію, або оновіть документацію щодо використання файлу Docker з іншим ім'ям.

Більше інформації тут: http://docs.docker.io/en/latest/commandline/command/build/


1
я спробував URL-адресу, і вона працює. Шлях також повинен працювати відповідно до документів. буде видавати помилку.
deepak

5
відповідно до документів, якими ви поділились (дякую). docker build - < Dockerfileне дозволить мені ДОДАТИ локальний файл. Але спробував, і це працює
deepak

2
але я хочу надати інший файл Docker і все одно мати контекст, тобто. Додати файли. тож я буду подавати помилку
deepak

Це просто створить контекст з одним файлом Docker. Усі допоміжні файли не потрапляють у контекст.
itsafire

12

Спробуйте dockerfeed . Він використовує функцію докера для побудови контексту за допомогою stdin. Я написав сценарій, щоб вирішити саме вашу проблему, з якою я стикався сам.

Щоб замінити файл Docker іншим, ви робите це так:

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

І вуаля. Dockerfeed робить те саме, що і docker build. Він пакує джерело зі своїм файлом Docker, але дозволяє замінити старий файл Docker на потрібний. У процесі не створюються файли, джерело не змінюється. Створений архів tar передається у докер, який, у свою чергу, надсилає його до демона докера.

Оновлення: Це була вірна відповідь у минулі часи, коли -fперемикач не був доступний. З версією docker 1.5 ця опція була введена. Тепер ви можете створити інший файл Docker, наприклад:

docker build -f other-Dockerfile .

5

Ви можете отримати це також за допомогою docker-compose.

У вашому docker-compose.yml у розділі побудови ви можете вказати каталог, в якому ви зберігаєте свій файл docker, та його альтернативне ім'я, як показано нижче:

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

докер-скласти


0

Припустимо, що ви успішно встановили набір інструментів docker, включаючи 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, тоді ви збираєтеся створити зображення для Інтернету.


0

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

Найбільш чистим і простим (для мене) рішенням є (ввести відповіді dockerfeedзверху):

cat DockerFile.debian.foo | docker build -t debian.foo -

0

Користувач Windows повинен спробувати команду нижче:

docker build -f абсолютна_докер_файл_путь крапка

наприклад :

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.