2016-08-22 29 views
6

Đang cố gắng để làm theo một vài [1] [2] đơn giản hướng dẫn Docker qua AWS sáng và nhận được lỗi sau:Docker Xây dựng không thể tìm thấy pip

> docker build -t my-app-image .           
Sending build context to Docker daemon 94.49 MB 
Step 1 : FROM amazon/aws-eb-python:3.4.2-onbuild-3.5.1 
# Executing 2 build triggers... 
Step 1 : ADD . /var/app 
---> Using cache 
Step 1 : RUN if [ -f /var/app/requirements.txt ]; then /var/app/bin/pip install -r /var/app/requirements.txt; fi 
---> Running in d48860787e63 
/bin/sh: 1: /var/app/bin/pip: not found 
The command '/bin/sh -c if [ -f /var/app/requirements.txt ]; then /var/app/bin/pip install -r /var/app/requirements.txt; fi' returned a non-zero code: 127 

Dockerfile:

# For Python 3.4 
FROM amazon/aws-eb-python:3.4.2-onbuild-3.5.1 

nào pip trả về những điều sau:

> which pip                
./bin/pip 

Cấu trúc tệp có liên quan:

. 
├── Dockerfile 
├── bin 
│   ├── activate 
│   ├── pip 
│   ├── pip3 
│   ├── pip3.5 
│   ├── python -> python3 
│   ├── python-config 
│   ├── python3 
│   ├── python3.5 -> python3 
│ . 
. 

Một lần nữa, noob trong tất cả mọi thứ Docker vì vậy tôi không chắc chắn nên thực hiện các bước khắc phục sự cố. Vui lòng cho tôi biết những thông tin hữu ích khác mà tôi có thể cung cấp.

+0

Bạn đang chạy 'pip' từ đâu? 'Bin/pip' có tồn tại trong cùng thư mục với Dockerfile của bạn không? – jwodder

+0

Tôi giả định rằng pip đang được chạy từ ../myapp/bin/pip, vì vậy, có, nó nằm trong cùng thư mục với Dockerfile của tôi. Tôi sẽ cập nhật câu hỏi với cấu trúc tệp có liên quan. – dperconti

+0

Nếu 'pip' không được chứa cùng thư mục với Dockerfile của bạn (tức là, trong cùng một thư mục hoặc trong thư mục con của nó), không có gì sẽ có sẵn bên trong vùng chứa. Thực tế là bạn hiển thị pip như trong '../ myapp/bin' cho thấy rằng đây là vấn đề của bạn.Hãy xem xét cắt xén Dockerfile của bạn thành chỉ các câu lệnh 'FROM' và' ADD', sau đó khởi động một trình bao trong ảnh kết quả và kiểm tra xem mọi thứ có trông giống như bạn mong đợi hay không. – larsks

Trả lời

3

Something là rất kỳ quặc ở đây. Tại sao bạn có nội dung virtualenv bên cạnh Dockerfile của bạn? The image you are building from tạo virtualenv trên/var/app (trong vùng chứa, có?) Cho bạn. Tôi tin rằng lệnh ONBUILD sao chép nó (hoặc một phần của nó) qua và làm hỏng phần còn lại của quá trình, làm cho/var/app/bin/pip không hoạt động được.

FROM  python:3.4.2 <-- this is the base image, on top of which the following command will be applied 

WORKDIR /var/app <-- this is the working dir (a la 'cd /var/app') 

RUN  pip3 install virtualenv <-- using pip3 (installed using base image I presume) to install the virtualenv package 
RUN  virtualenv /var/app <-- creating a virtual env on /var/app 
RUN  /var/app/bin/pip install --download-cache /src uwsgi <-- using the recently install virtualenv pip to install uwsgi 

... 

ONBUILD ADD . /var/app <-- add the contents of the directory where the Dockerfile is built from, I think this is where the corruption happen 
ONBUILD RUN if [ -f /var/app/requirements.txt ]; then /var/app/bin/pip install -r /var/app/requirements.txt; fi <-- /var/app/bin/pip has beed corrupted 

Bạn không nên quan tâm đến việc có/var/ứng dụng có sẵn trên máy chủ lưu trữ bên ngoài. Bạn chỉ cần (dựa trên các tập tin Dockerbuild) có "requirements.txt" có sẵn trên máy chủ, để được sao chép vào container (hoặc không, nếu không, nó sẽ bỏ qua).

+0

nội dung virtualenv có ở đó vì tôi đang chuyển qua dự án hiện có. Bất kể, tôi đã xóa tất cả các nội dung docker khác và virtualenv và bắt đầu mới với việc triển khai trình docker. Tôi đang gặp phải các vấn đề khác nhau nhưng tôi đã vượt qua vấn đề trên. Cảm ơn đã giúp đỡ. – dperconti

1

/var/app/bin/pip được supopsed để làm việc vì amazon/aws-eb-python:3.4.2-onbuild-3.5.1 Dockerfile bao gồm:

RUN  pip3 install virtualenv 
RUN  virtualenv /var/app 
RUN  /var/app/bin/pip install --download-cache /src uwsgi 

Nó có nghĩa là khi bạn đang sử dụng hình ảnh này như một hình ảnh cơ bản, nó hai ONBUILDinstructions sẽ áp dụng đối với hiện tại của bạn xây dựng.

ONBUILD ADD . /var/app 
ONBUILD RUN if [ -f /var/app/requirements.txt ]; then /var/app/bin/pip install -r /var/app/requirements.txt; fi 

Hãy thử với một Dockerfile đơn giản hơn và mở phiên trình bao từ nó, để kiểm tra xem/var/app có ở đó không và nếu pip được cài đặt đúng chưa.
Bạn cũng có thể thử nghiệm xây dựng lại trực tiếp hình ảnh 3.4.2-aws-eb-onbuild, một lần nữa để thử nghiệm.

1

Tôi nghĩ vấn đề là làm thế nào bạn đã tổ chức bin/file pip bạn

Từ Docker Tài liệu: https://docs.docker.com/engine/reference/builder/#add

If <dest> does not end with a trailing slash, it will be considered a regular file and the contents of <src> will be written at <dest>. 

Vì vậy, cấu trúc tập tin của bạn nên là:

. 
├── Dockerfile 
├── app 
| |__bin 
| | | 
│  ├── activate 
│  ├── pip 
│  ├── pip3 
│  ├── pip3.5 
│  ├── python -> python3 
│  ├── python-config 
│  ├── python3 
│  ├── python3.5 -> python3 
│  . 
. 
Các vấn đề liên quan