2016-12-22 3 views
2

У меня есть следующая структура проекта:Докер-Compose: всегда получить не удается найти указанный Dockerfile

WebApp 
    -- docker-compose.yml 
    -- Dockerfile 
    -- docker 
    -- docker-gc 
     --Dockerfile 

docker/docker-gc является мерзавец подмодуль, который я создал, прежде чем использовать эту команду:

git submodule add [email protected]:spotify/docker-gc.git docker/docker-gc 

в докер -compose, я пытаюсь запустить Dockerfile в docker-gc. Вот моя служба:

gc: 
    container_name: docker-gc 
    build: ./docker/docker-gc 
    dockerfile: ./docker/docker-gc/Dockerfile 
    volumes: 
    - /var/run/docker.sock:/var/run/docker.sock 
    - /etc:/etc 

Но я всегда получаю ошибку:

Cannot locate specified Dockerfile ./docker/docker-gc/Dockerfile

Я пробовал много способов, таких как docker/docker-gc/Dockerfile или /docker/docker-gc/Dockerfile без результата. Связана ли эта проблема с symlink (из-за природы подмодуля git). Скажите, пожалуйста, как я могу это исправить.

+0

Что произойдет, если вы удалите атрибут 'dockerfile' из файла' docker-compose.yaml'? Должен ли он автоматически использовать «Dockerfile» из указанного каталога 'build'? – nwinkler

+0

@nwinkler приятно. оно работает. так здесь что-то не так? в случае, если я хочу использовать другой 'Dockerfile'? (например: 'Dockerfile-dev' для среды dev). thanks –

+0

Просто укажите имя файла в атрибуте dockerfile, я думаю, что он разрешен в каталоге сборки. – nwinkler

ответ

4

Ошибка в файле docker-compose.yaml. В версии 1 этого формата вы можете указать как build, так и dockerfile. Если вы предоставляете оба значения, атрибут dockerfile обозначает имя файла, которое, как ожидается, будет найдено в каталоге, указанном build.

В вашем случае, измените атрибут dockerfile просто укажите имя файла, а не тот же путь, что и в build:

gc: 
    container_name: docker-gc 
    build: ./docker/docker-gc 
    dockerfile: Dockerfile 
    volumes: 
    - /var/run/docker.sock:/var/run/docker.sock 
    - /etc:/etc 

С Dockerfile это имя по умолчанию, вы можете просто удалить эту строку:

gc: 
    container_name: docker-gc 
    build: ./docker/docker-gc 
    volumes: 
    - /var/run/docker.sock:/var/run/docker.sock 
    - /etc:/etc 

Для получения дополнительной информации, пожалуйста, обратитесь к Docker Compose documentation.

Также обратите внимание, что в версии 2 формата файла Docker Compose используется другое понятие параметра build.

+0

супер полезно: D большое спасибо за ваш четкий ответ: D –

0

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

+0

Я пробовал один и тот же результат; ( –

 Смежные вопросы

  • Нет связанных вопросов^_^