Pertanyaan Bagaimana saya bisa mengganti CMD saat menjalankan gambar buruh pelabuhan?


Saya ingin memeriksa gambar buruh pelabuhan yang dibuat oleh orang lain dengan entri dan cmd yang ditentukan, misalnya:

ENTRYPOINT ["/usr/sbin/apache2ctl"]
CMD ["-D", "FOREGROUND"]

Saat ini saya lakukan:

docker run --interactive --tty --entrypoint=/bin/bash $IMAGE --login

Apakah ada cara untuk mengganti CMD menjadi kosong (jadi saya tidak perlu menggunakan "--login")?


82
2018-05-10 12:59






Jawaban:


Anda hanya bisa masuk via docker run -it --entrypoint=/bin/bash $IMAGE -i (Anda akan meluncurkan kontainer baru dari gambar dan mendapatkan shell bash dalam mode interaktif), kemudian jalankan perintah entrypoint dalam wadah itu.

Anda kemudian dapat memeriksa penampung yang berjalan di negara yang seharusnya berjalan.

EDIT: Karena Docker 1.3 dapat Anda gunakan exec untuk menjalankan proses dalam penampung yang berjalan. Mulai penampung Anda seperti biasa, lalu masukkan dengan mengeluarkan:

docker exec -it $CONTAINER_ID /bin/bash

Dengan asumsi bash diinstal, Anda akan diberikan akses shell ke wadah yang sedang berjalan.


90
2018-05-12 09:28



Bukankah itu mengeksekusi "/ usr / sbin / apache2ctl / bin / bash"? (karena contoh Anda tidak mengesampingkan titik masuk, ia akan menggunakan entrypoint yang ditentukan dalam Dockerfile - atau apakah saya kehilangan sesuatu?) - warp
Apakah itu sesuatu yang berbeda untuk versi docker yang lebih tua / lebih baru mungkin? Ini pasti menjalankan entrypoint untuk saya: gist.github.com/warpr/26a5cc471dce7fcf9021 . Ini menggunakan docker 0.10.0 pada Ubuntu 13.10. - warp
Lewat -entrypoint menimpa entrypoint. Lihat jawaban yang diedit - Panagiotis Moustafellos
Saya tahu lewat - endpoint menimpa entrypoint. Tetapi ketika saya menggunakan --entrypoint, bagaimana cara saya mengganti CMD menjadi kosong? (Untuk bash saya dapat menggunakan sesuatu seperti -i atau --login, tetapi tidak semua entrypoint yang mungkin ingin saya gunakan akan memiliki argumen "dummy" yang setara). - warp
Setidaknya di Docker v1.11.1 tampak bahwa mengesampingkan --entrypoint juga mencegah penambahan normal CMD ke entrypoint. Itu sepertinya hanya terjadi ketika entrypoint tidak ditimpa. - Jasmine Hegman


Lihat: https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults

Porsi yang relevan:

CMD (Perintah atau Opsi Default) Ingat kembali COMMAND opsional di commandline Docker:

$ docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

Perintah ini opsional karena orang yang membuat IMAGE mungkin telah memberikan perintah default menggunakan Dockerfile CMD. Sebagai operator (orang yang menjalankan kontainer dari gambar), Anda dapat mengganti CMD itu hanya dengan menentukan COMMAND baru.

Jika gambar juga menentukan ENTRYPOINT maka CMD atau COMMAND akan ditambahkan sebagai argumen ke ENTRYPOINT.

Jadi untuk melakukan apa yang Anda inginkan, Anda butuhkan hanya tentukan cmd, dan timpa penggunaan /bin/bash. Tidak cukup "kosong", tetapi menyelesaikan pekerjaannya 99%.


19
2018-06-12 07:31



Ups, saya mengabaikan detail. Kecuali untuk pemendekan --loginuntuk -l Saya kira solusi Anda sudah sebaik mungkin. - Simon Thum
Inilah hal yang menyenangkan yang saya lihat hari ini: perintah tidak ditimpa, itu ditambahkan. Ini PS dari dalam kontainer. Perhatikan bahwa perintah yang saya tambahkan adalah echo "pengaturan db" dan perintah yang dibangun adalah / usr / bin / geth. Juga saya set entrypoint menjadi "". 1 ? Ssl 0:00 /usr/bin/geth echo setting up db - Paul S
Tautan referensi buruh pelabuhan tidak lagi berfungsi - tidak dapat menemukan pengganti yang jelas untuk itu. - Chris Kimpton
Saya hanya memperbaikinya, tetapi saya juga merasa sulit untuk menemukannya; ( - Simon Thum


Bagi siapa pun yang datang ke sini untuk mengesampingkan entri DAN perintah untuk meneruskan perintah lainnya, mis. jalankan bash alih-alih skrip entrypoint dan kemudian jalankan beberapa perintah lain dengan parameter (tidak jelas bagi saya dari jawaban lain):

 docker run [other options] --entrypoint '/bin/sh' $IMAGE -c 'npm link gulp gulp-sass gulp-sourcemaps'

-c 'npm link ...' adalah parameter untuk /bin/sh jadi di sini Anda dapat meneruskan perintah apa pun yang ingin Anda jalankan dalam penampung. /bin/sh adalah untuk gambar alpine, /bin/bash kemungkinan besar untuk gambar lainnya.


7
2018-05-04 07:28



hanya perintah shell addtion harus ditulis berdasarkan json, jadi bukannya mengutip dengan tanda kutip tunggal '...' gunakan tanda kutip ganda "..." - Jimmy Obonyo Abor