Tại sao tôi không thể cd vào một thư mục với docker chạy?


39

Tôi cần chạy một ứng dụng từ một thư mục cụ thể.

$ sudo docker run -P ubuntu/decomposer 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'
2014/10/09 21:30:03 exec: "cd /local/deploy/decomposer; ./decomposer-4-15-2014": stat cd /local/deploy/decomposer; ./decomposer-4-15-2014: no such file or directory

Thư mục đó chắc chắn tồn tại và nếu tôi kết nối với docker bằng cách chạy bash tương tác, tôi có thể chạy lệnh trên.

$ sudo docker run -i -t ubuntu/decomposer /bin/bash
# cd /local/deploy/decomposer; ./decomposer-4-15-2014

Tôi có thể chạy chương trình của mình bằng cách chỉ định đường dẫn đầy đủ, nhưng sau đó nó gặp sự cố vì dự kiến ​​sẽ được khởi chạy từ thư mục hiện tại. Tôi có thể làm gì?

Câu trả lời:


34

Truyền lệnh của bạn dưới dạng đối số cho / bin / sh như thế này:

sudo docker run -P ubuntu/decomposer /bin/sh -c 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'

docker chạy centos / bin / sh -c 'cd / bin; / bin / ls 'không in gì, trong khi docker chạy centos / bin / sh -c' / bin / ls / bin 'hoạt động.
seanmcl

Trên thực tế cả hai lệnh đều đưa ra danh sách các tệp trong thư mục / bin. Đã thử cả hai.
Keo dán

Không phải trên hộp của tôi, centos7.
seanmcl

1
Trên thực tế, thậm chí chỉ cần loại bỏ các trích dẫn xung quanh lệnh của tôi để chạy hoạt động tốt. Tôi nghĩ rằng docker kết thúc nó trong một /bin/sh -canyway.
schmmd

85

Bạn có thể sử dụng -wtùy chọn để thay đổi thư mục làm việc của bạn.

docker run

  -w, --workdir=""           Working directory inside the container

Vì vậy, trong trường hợp của bạn, bạn sẽ chạy:

sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014

Tôi có thể sử dụng -wvới docker exec? Tôi đang tìm cách chạy script python trong container của mình, nhưng không thể dừng nó bên ngoài container.
zx1986

oh, tôi đã có câu trả lời ....flag provided but not defined: -w
zx1986

1
Chết tiệt tại sao điều này đã được giấu tất cả các cách ở dưới cùng của trang tham khảo chạy docker ! :-)
Amir Abiri

5
Đây phải là câu trả lời được chấp nhận
fferri

4

Sử dụng WORKDIR trong Dockerfile của bạn để đặt thư mục làm việc. Sau đó, bạn có thể chạy lệnh của mình với EXEC.


0

Điều này có thể là do vấn đề cấp phép hoặc cá thể không thể tìm thấy đường dẫn khả dụng. Để kiểm tra điều này, hãy thử thêm vị trí khả dụng trong đường dẫn và thử chạy tập lệnh

để thêm thư mục hiện tại vào đường dẫn, vui lòng sử dụng lệnh bên dưới

$ export PATH=$PATH:
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.