Docker chạy không nối các đối số vào điểm nhập hình ảnh


13

Tôi có một Dockerfile với:

ENTRYPOINT ["uwsgi", "--ini /home/docker/app/uwsgi_app.ini"]

(không CMD)

Khi tôi chạy mà uwsgi phàn nàn đúng:

uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***

Bây giờ, tôi nghĩ rằng tôi có thể nối các đối số vào điểm vào thông qua docker runnhư vậy:

$ docker run -itP uwsgi_app:0.1 --uid=docker

Tuy nhiên uwsgi vẫn phàn nàn với cùng một lỗi, có vẻ như arg chưa được nối thêm.

Nếu tôi ghi đè điểm vào thì arg được thêm vào:

$ docker run -itP --entrypoint bash uwsgi_app:0.1 --uid=docker
bash: --uid=docker: invalid option

... Tôi tự hỏi liệu đó có phải là --inilựa chọn của uwsgi bỏ qua các đối số khác không, nhưng không phải vậy:

$ docker run -itP --entrypoint bash uwsgi_app:0.1
[ root@88941de25b1f:/home/docker ]$ uwsgi --ini /home/docker/app/uwsgi_app.ini --uid=docker
user docker not found.

(được rồi, một lỗi, nhưng cho thấy arg đã được chấp nhận)

Câu trả lời:


26

Hóa ra câu trả lời là sử dụng dạng mảng của ENTRYPOINT(và / hoặc CMD) để nối thêm từ dòng lệnh vào công việc

với:

ENTRYPOINT ["uwsgi", "--ini", "/home/docker/app/uwsgi_app.ini"]

sau đó:

$ docker run -itP uwsgi_app:0.2 --uid=docker
...
user docker not found.

(được rồi, một lỗi, nhưng cho thấy arg đã được chấp nhận)

Hành vi này thực sự được mô tả trong các tài liệu:
https://docs.docker.com/reference/builder/#entrypoint

... Tôi đã bỏ lỡ điều đó khi đọc lướt qua chúng :)


Làm cách nào để thay đổi đối số mảng trên dòng lệnh thành docker chạy --entrypoint ... IMAGE?
lươn ghEEz

Tôi không nghĩ rằng có một hình thức mảng cho lệnh chạy docs.docker.com/engine/reference/run/... có lẽ bạn phải trích dẫn nó ví dụdocker run --entrypoint "uwsgi --ini /home/docker/app/uwsgi_app.ini" <image>
Anentropic
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.