Docker run tidak menambahkan argumen ke titik masuk gambar

13

Saya punya Dockerfile dengan:

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

(tidak CMD)

Ketika saya menjalankannya, uwsgi dengan benar mengeluh:

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

Sekarang, saya pikir saya bisa menambahkan argumen ke titik masuk melalui docker runseperti:

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

Namun uwsgi masih mengeluh dengan kesalahan yang sama, sepertinya arg belum ditambahkan.

Jika saya mengganti entrypoint maka arg ditambahkan:

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

... Saya bertanya-tanya apakah itu --inipilihan uwsgi mengabaikan argumen lain, tapi bukan itu:

$ 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.

(Oke, kesalahan, tetapi menunjukkan arg diterima)

Anentropik
sumber

Jawaban:

26

Ternyata jawabannya adalah menggunakan bentuk array dari ENTRYPOINT(dan / atau CMD) agar menambahkan dari baris perintah untuk bekerja

dengan:

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

kemudian:

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

(Oke, kesalahan, tetapi menunjukkan arg diterima)

Perilaku ini sebenarnya dijelaskan dalam dokumen:
https://docs.docker.com/reference/builder/#entrypoint

... Aku melewatkan itu ketika membaca skim mereka :)

Anentropik
sumber
Bagaimana cara mengubah argumen array pada baris perintah ke buruh pelabuhan menjalankan --entrypoint ... IMAGE?
belut ghEEz
Saya tidak berpikir ada bentuk array untuk menjalankan perintah docs.docker.com/engine/reference/run/… mungkin Anda harus mengutipnya misalnyadocker run --entrypoint "uwsgi --ini /home/docker/app/uwsgi_app.ini" <image>
Anentropic