Soru Bir docker görüntüsünü çalıştırırken CMD'yi nasıl geçersiz kılabilirim?


Hem giriş noktası hem de cmd ile bir başkasının oluşturduğu bir docker görüntüsünü incelemek istiyorum, örneğin:

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

Şu anda yapıyorum:

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

CMD'yi boş bırakmak için bir yol var mı (bu yüzden "--login" kullanmak zorunda değilim)?


83
2018-05-10 12:59


Menşei




Cevaplar:


Sadece üzerinden girebilirsiniz docker run -it --entrypoint=/bin/bash $IMAGE -i (görüntüden yeni bir kap başlatırsınız ve etkileşimli modda bir bash kabuk alırsınız), daha sonra bu kapsayıcıdaki giriş noktası komutunu çalıştırırsınız.

Daha sonra çalışan konteyneri, çalışması gereken durumda inceleyebilirsiniz.

DÜZENLEME: Docker 1.3 beri kullanabilirsiniz exec çalışan bir kapsayıcıda işlem yapmak için. Kapsayıcısını normalde yaptığınız gibi başlatın ve ardından yayınlayarak şunları girin:

docker exec -it $CONTAINER_ID /bin/bash

Bash'ın kurulu olduğu varsayıldığında, çalışan konteynere kabuk erişimi verilecektir.


92
2018-05-12 09:28



"/ Usr / sbin / apache2ctl / bin / bash" komutunu çalıştırmaz mı? (örneğiniz giriş noktasını geçersiz kıldığından, Dockerfile'da tanımlanan giriş noktasını kullanacaktır - yoksa bir şey özlüyor muyum?) - warp
Belki de eski / daha yeni docker versiyonları için farklı olan bir şey mi? Kesinlikle benim için giriş noktasını çalıştırıyor: gist.github.com/warpr/26a5cc471dce7fcf9021 . Bu Ubuntu 13.10 docker 0.10.0 kullanıyor. - warp
Geçen -entrypoint giriş noktasını geçersiz kılar. Düzenlenmiş cevaba bakınız - Panagiotis Moustafellos
Geçişin --entrypoint'in giriş noktasını geçersiz kıldığını biliyorum. Ama --entrypoint kullandığımda, CMD'yi boş olarak nasıl geçersiz kılarım? (Bash için -i veya --login gibi bir şey kullanabilirim ama kullanmak isteyebileceğim tüm giriş noktaları eşdeğer bir "kukla" argümana sahip değildir). - warp
En azından Docker v1.11.1'de, --entrypoint'i geçersiz kılmak, CMD'nin giriş noktasına normal olarak eklenmesini de önler. Bu sadece giriş noktası geçersiz kılındığında gerçekleşmiş gibi görünüyor. - Jasmine Hegman


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

İlgili kısmı:

CMD (Varsayılan Komut veya Seçenekler) Docker komut satırında isteğe bağlı COMMAND'i çağırın:

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

Bu komut isteğe bağlıdır, çünkü IMAGE'yi oluşturan kişi Dockerfile CMD'yi kullanarak zaten bir varsayılan COMMAND sağlamış olabilir. Operatör olarak (görüntüden bir kap koşan kişi), yeni bir COMMAND belirterek bu CMD'yi geçersiz kılabilirsiniz.

Görüntü ayrıca bir GİRİŞ NOKTASI belirtirse, CMD veya COMMAND, GİRİŞ NOKTASI'na argüman olarak eklenir.

İstediğin şeyi yapmak için ihtiyacın var sadece cmd belirtin ve geçersiz kılmayı kullanın /bin/bash. Oldukça "boş" değil, ama iş% 99 yapılır.


19
2018-06-12 07:31



Ayy, bir detayı gözden kaçırdım. Kısaltma hariç --loginiçin -l Sanırım çözümün zaten olduğu kadar iyi. - Simon Thum
İşte bugün gördüğüm eğlenceli bir şey: komut geçersiz kılmıyor, eklenmiş. İşte konteynerin içinden gelen PS. Eklediğim komutun "db'nin ayarlanması" ve "/ usr / bin / geth" komutlarının eklendiğini unutmayın. Ayrıca giriş noktasını "" olarak ayarladım. 1 ? Ssl 0:00 /usr/bin/geth echo setting up db - Paul S
Docker referans bağlantısı artık çalışmıyor - bunun için belirgin bir yer bulamıyor. - Chris Kimpton
Sadece tamir ettim, ama bulmayı da zor buldum. - Simon Thum


Buraya giren herkes, giriş komutunu VE komutunu geçersiz kılmak için diğer komutları, ör. giriş noktası komut dosyası yerine bash komutunu çalıştırın ve sonra başka bir komutu parametrelerle çalıştırın (diğer yanıtlardan bana açık değildi):

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

-c 'npm link ...' parametresi /bin/sh Bu yüzden burada konteynırda çalıştırmak istediğiniz herhangi bir komutu iletebilirsiniz. /bin/sh alp görüntüleri içindir /bin/bash diğer görüntüler için büyük olasılıkla.


7
2018-05-04 07:28



sadece bir addtion kabuk komutları json tabanlı yazılmalıdır, bu yüzden tek tırnak işaretleri ile alıntı yapmak yerine '...' çift ​​tırnak kullan "..." - Jimmy Obonyo Abor