특정 Dockerfile을 빌드 할 수 없음


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 예. 그 질문입니다
디팍

1
실행 docker build --help하면 찾고있는 내용을 찾을 수있는 줄이 있습니다. -f, --file string Dockerfile의 이름 (기본값은 'PATH / Dockerfile')
blasrodri

2
2013 년에 Docker를 배웠습니다.
mcan

답변:


210

.두 명령 끝에 점이 있습니다.

docker build -f MyDockerfile.

또는 태그 사용 :

docker build -t mysuperimage -f MyDockerfile.


1
docker build -f Dockerfile.consumer"도커 빌드"에는 정확히 1 개의 인수가 필요합니다. 'docker build --help'를 참조하십시오. 사용법 : docker build [OPTIONS] PATH | URL | -
카말

12
@kamal .위의 명령 끝에 점 ( ) 이 표시 되었습니까?
Sateesh Pagolu

7
그냥 말-. 그냥 일반 자극적이다
myloginid

2
.필요한 일이 아니다. 빌드 명령은 두 개의 인수 즉, 경로 Dockerfilecontext디렉토리 경로 . 그래서 우리는 할 수 있습니다docker build -t mysupertag -f ./foo/Dockerfile ./foo
Mohnish


22

docker 빌드의 마지막 매개 변수는 빌드 경로 입니다.이를 입력 .하면 Dockerfile. 그것을 변경하면 올바르지 않은 Dockerfile.app을 찾으려고 시도 Dockerfile.app/Dockerfile합니다.

여전히 작동하는지 확실하지 않지만 이전에는이 ​​작업을 수행 할 수있었습니다.

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

시도해보고 도움이되지 않는 경우 Docker 문제를 열어이 기능을 다시 추가하거나 다른 이름으로 Dockerfile을 사용하는 방법에 대한 설명서를 업데이트하십시오.

자세한 정보 : http://docs.docker.io/en/latest/commandline/command/build/


1
나는 URL을 시도했고 작동합니다. 경로도 문서에 따라 작동해야합니다. 버그를 신고합니다.
디팍

5
공유 한 문서에 따라 (감사합니다). docker build - < Dockerfile로컬 파일을 추가 할 수 없습니다. 그러나 그것을 밖으로 시도하고 작동 한
디팍

2
하지만 다른 Dockerfile을 제공하고 여전히 컨텍스트가 있습니다. 파일 추가. 그래서 버그를
신고

그러면 Dockerfile이 하나있는 컨텍스트가 생성됩니다. 모든 지원 파일이 컨텍스트에 포함되지는 않습니다.
itsafire 2014 년

12

dockerfeed 사용해보십시오 . Docker 기능을 사용하여 stdin을 통해 컨텍스트를 빌드합니다. 나는 내가 직면 한 문제를 정확히 해결하기 위해 스크립트를 작성했습니다.

Dockerfile을 다른 파일로 바꾸려면 다음과 같이하십시오.

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

그리고 voilà. Dockerfeed는 docker build. Dockerfile로 소스를 압축하지만 이전 Dockerfile을 원하는 것으로 바꿀 수 있습니다. 프로세스에서 파일이 생성되지 않으며 소스가 변경되지 않습니다. 생성 된 tar 아카이브는 docker로 파이프되어 Docker 데몬으로 전송됩니다.

업데이트 : 이것은 -f사용 가능한 스위치 가 없었던 예전에는 유효한 대답이었습니다 . Docker 버전 1.5에서는이 옵션이 도입되었습니다. 이제 다음과 같이 다른 Dockerfile을 제공하여 빌드 할 수 있습니다.

docker build -f other-Dockerfile .

5

docker-compose를 사용하여이를 달성 할 수도 있습니다.

빌드 섹션 아래의 docker-compose.yml에서 다음과 같이 dockerfile과 대체 이름을 저장할 디렉토리를 지정할 수 있습니다.

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

도커 작성


0

docker-composedocker-machine을 포함한 docker 도구 상자를 성공적으로 설치했다고 가정합니다 . 이것은 내 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디렉토리에 있으며 많은 파일이 있으며 docker는 다른 파일을 시도하지만-f <Dockerfile.foo>

가장 깨끗하고 쉬운 (나에게) 해결책은 ( dockerfeed위의 답변에서) 다음과 같습니다.

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

0

Windows 사용자는 아래 명령을 시도해야합니다.

docker build -f absolute_docker_file_path dot

예 :

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.