2016-03-26 25 views
9

Tôi đã sao chép một thiết lập docker sử dụng docker-compose. Một nhà phát triển từ xa xác nhận nó hoạt động để vấn đề của tôi dường như là với thiết lập của tôi.docker-compose cho ERROR: Không thể xác định vị trí Dockerfile được chỉ định: Dockerfile

Tôi chạy docker-compose up, nhưng mà hiện tại mang lại cho tôi điều này:

$ docker-compose up 
Creating volume "mycompanydocker_mysql-data" with local driver 
Creating volume "mycompanydocker_redis-data" with local driver 
Creating volume "mycompanydocker_app-data" with local driver 
Creating volume "mycompanydocker_mongo-data" with local driver 
mycompanydocker_redis_1 is up-to-date 
mycompanydocker_mongo_1 is up-to-date 
mycompanydocker_mysql_1 is up-to-date 
Building app 
ERROR: Cannot locate specified Dockerfile: Dockerfile 

My docker-compose.yml trông như thế này:

version: '2' 

services: 
    mysql: 
    build: mysql/. 
    env_file: env 
    expose: 
    - 3306 
    ports: 
    - "3306:3306" 
    volumes: 
    - mysql-data:/var/lib/mysql 

    mongo: 
    build: mongo/. 
    env_file: env 
    expose: 
    - 27017 
    ports: 
    - "27017:27017" 
    volumes: 
    - mongo-data:/data/db 

    redis: 
    build: redis/. 
    env_file: env 
    expose: 
    - 6379 
    ports: 
    - "6379:6379" 
    volumes: 
    - redis-data:/data 

    app: 
    build: app/. 
    env_file: env 
    expose: 
    - 80 
    ports: 
    - "80:80" 
    volumes: 
    # To mount a local directory, change this 
    # To use a docker volume 
    - app-data:/app 
    # local app 
    # - ./mycompany:/app 
    depends_on: 
    - mysql 
    - mongo 
    - redis 

volumes: 
    app-data: 
    driver: local 
    mysql-data: 
    driver: local 
    redis-data: 
    driver: local 
    mongo-data: 
    driver: local 

và cây trông như thế này:

$ tree 
. 
├── README.rst 
├── app 
│   ├── Dockerfile 
│   ├── bin 
│   │   ├── setup.sh 
│   │   ├── start-nginx.sh 
│   │   ├── start-rqworker.sh 
│   │   ├── start.sh 
│   │   └── update.sh 
│   ├── etc 
│   │   ├── nginx 
│   │   │   └── sites-available 
│   │   │    └── app 
│   │   ├── supervisor 
│   │   │   └── conf.d 
│   │   │    └── supervisord.conf 
│   │   └── supervisord.conf 
│   └── ssh 
│    └── id_rsa 
├── docker-compose.yml 
├── env 
├── mongo 
│   └── Dockerfile 
├── mysql 
│   └── Dockerfile 
└── redis 
    └── Dockerfile 

Các điều tôi không hiểu là docker-compose dường như tìm tất cả Dockerfile s, ngoại trừ một trong thư mục app. Tôi đã có những sản phẩm sau được cài đặt trên OSX 10.11.2:

  • Docker version 1.10.3, build 20f81dd
  • docker-compose version 1.6.2, build 4d72027

Tôi chỉ bắt đầu với Docker và tôi kinda bị mắc kẹt ở đây. Có ai biết những gì có thể có thể là sai hoặc làm thế nào tôi có thể gỡ lỗi này? Tất cả các mẹo đều được chào đón!

[EDIT] tôi quên đề cập đến là không có ẩn tập tin .dockerignore:

$ ls -la 
total 56 
[email protected] 11 kramer staff 374 25 mrt 14:13 . 
drwx------+ 1134 kramer staff 38556 26 mrt 17:27 .. 
[email protected] 1 kramer staff 8196 26 mrt 08:14 .DS_Store 
[email protected] 1 kramer staff  23 24 mrt 15:29 .gitignore 
[email protected] 1 kramer staff 3879 24 mrt 15:29 README.rst 
[email protected] 7 kramer staff 238 25 mrt 14:26 app 
[email protected] 1 kramer staff 868 25 mrt 17:50 docker-compose.yml 
[email protected] 1 kramer staff 219 24 mrt 15:29 env 
[email protected] 3 kramer staff 102 24 mrt 15:29 mongo 
[email protected] 3 kramer staff 102 24 mrt 15:29 mysql 
[email protected] 3 kramer staff 102 24 mrt 15:29 redis 

và file .gitignore không chứa bất cứ điều gì đặc biệt cả (không biết nếu vấn đề):

$ cat .gitignore 
.project 
.pydevproject 
+0

Kiểm tra xem bạn có ẩn '.docke không tệp rignore' có thể chứa 'Dockerfile' trong nội dung của nó. Một lý do khác có thể là bạn có các liên kết tượng trưng trong cấu trúc thư mục của bạn. –

+0

@warmoverflow - Tôi quên đề cập rằng không có '.dockerignore'. Tôi đã tìm kiếm toàn bộ hệ thống tệp ('sudo find/-name .dockerignore') và đã tìm thấy một tệp' .dockerignore', nhưng đó là một số repo hoàn toàn không liên quan. Ngoài ra, không có symlink trong dự án. – kramer65

+0

Bạn có thể chỉ định rõ ràng tên Dockerfile để xem nó có hoạt động hay không. xem https://docs.docker.com/compose/compose-file/#context.'build: ngữ cảnh:. dockerfile: Dockerfile-alternate' –

Trả lời

8

Dưới đây là cách chỉ định dockerfile. Xin lỗi tôi không thể làm điều đó trong các ý kiến ​​như định dạng không được hỗ trợ trên đó.

https://docs.docker.com/compose/compose-file/#context

app: 
    build: 
     context: app 
     dockerfile: Dockerfile 
+0

Cảm ơn bạn đã đề xuất, nhưng tôi đã tìm thấy vấn đề. Hóa ra tên của Dockerfile là 'Dockerfile', bao gồm một dấu cách ở cuối. Tôi không có ý tưởng làm thế nào mà không gian đã có, nhưng yeah, nó làm việc một lần nữa .. :-) Cảm ơn một triệu cho các đề xuất của bạn mặc dù! Tôi sẽ chấp nhận câu trả lời của bạn, bởi vì nó cũng sẽ dẫn tôi đến giải pháp. – kramer65

+1

Rất vui khi bạn phát hiện ra. Điều này rất khó để nhận thấy. –

+1

Đối với những người không rõ ràng về lý do tại sao điều này làm việc, lý do là vì 'dockerfile' được tìm kiếm WITHIN bối cảnh xây dựng được xác định. – mikegreenberg

1

path mà bạn dự kiến ​​Dockerfile? Bạn có thể kiểm tra bằng cách sử dụng --verbose cờ như:

docker-compose --verbose up | grep compose.cli.verbose_proxy.proxy_callable | grep path 

ví dụ:

compose.cli.verbose_proxy.proxy_callable: docker build <- 
(pull=False, cache_from=None, stream=True, nocache=False, labels=None, 
tag='your_app', 
buildargs={'some_build': '1901', 'addr': '0.0.0.0', 'corsdomain': '*', 
'rpcport': '8545'}, forcerm=False, rm=True, 

path='/Users/jmunsch/Desktop/dev/your_app/app?', # in the verbose output 

dockerfile='Dockerfile') 

trong Dockerfile xác định ARGS:

ARG some_flag= 
ARG some_build=1900 
ARG addr=0.0.0.0 
ARG corsdomain="*" 
ARG rpcport=8545 

và trong một file soạn như:

build: 
    context: ./your_app 
    dockerfile: Dockerfile 
    args: 
     some_flag:  # --some_flag 
     some_build: 1901 # --some_build 1901 
     rpcaddr: 0.0.0.0 # --rpcaddr 0.0.0.0 
     rpcport: 8545 # --rpcport 8545 
     corsdomain: "*" # --corsdomain 
Các vấn đề liên quan