Liman işçisi görüntüsünü çalıştırırken CMD'yi nasıl geçersiz kılabilirim?


123

Hem giriş noktası hem de cmd belirtilmiş bir başkası tarafından oluşturulan bir liman işçisi 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ırakmanın bir yolu var mı (yani "--login" kullanmak zorunda değilim)?

Yanıtlar:


125

Sadece docker run -it --entrypoint=/bin/bash $IMAGE -i(görüntüden yeni bir konteyner başlatıp etkileşimli modda bir bash kabuğu elde edeceksiniz) üzerinden girerek giriş yapabilirsiniz .

Daha sonra çalışan kabı çalıştığı durumda kontrol edebilirsiniz.

EDIT: Docker 1.3'ten beri execbir işlemi çalışan bir kapta çalıştırmak için kullanabilirsiniz . Kapsayıcınızı normalde yaptığınız gibi başlatın ve daha sonra vererek aşağıdakileri girin:

docker exec -it $CONTAINER_ID /bin/bash

Bash'ın kurulu olduğunu varsayarak, çalışan kabın içine kabuk erişimi verilecektir.


Bu "/ usr / sbin / apache2ctl / bin / bash" komutunu çalıştırmaz mıydı? (örneğiniz giriş noktasını geçersiz kılmadığından Dockerfile içinde tanımlanan giriş noktasını kullanır - ya da bir şey eksik mi?)
warp

Belki daha eski / daha yeni liman işçisi sürümleri için farklı olan bir şey mi? Bu kesinlikle benim için giriş noktasını çalıştırıyor: gist.github.com/warpr/26a5cc471dce7fcf9021 . Bu, Ubuntu 13.10'daki liman işçisi 0.10.0 kullanıyor.
Warp

4
Geçiş noktasını biliyorum - giriş noktasını geçersiz kılar. Fakat --entrypoint kullandığımda CMD'yi boş bırakmak için nasıl geçersiz kılabilirim? (Bash için -i veya --login gibi bir şey kullanabilirim, ancak kullanmak isteyebileceğim tüm giriş noktalarının eşdeğer bir "kukla" argümanı olacaktır).
Warp

1
En azından Docker v1.11.1'de --entrypoint'i geçersiz kılmanın CMD'nin giriş noktasına normal şekilde eklenmesini önlediği görülüyor. Bu, yalnızca giriş noktası geçersiz kılınmadığında meydana gelir.
Jasmine Hegman

1
Neden bir -isonra var $IMAGE?
Eyal Levin

27

Bakınız: https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults

İlgili kısım:

CMD (Varsayılan Komut veya Seçenekler) Docker komut satırında isteğe bağlı KOMUTANLIĞI geri çağırın:

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

IMAGE'yi oluşturan kişi, Dockerfile CMD'yi kullanarak zaten varsayılan bir KOMUTAN sağlamış olabileceğinden, bu komut isteğe bağlıdır. Operatör olarak (görüntüden bir konteyner çalıştıran kişi), yalnızca yeni bir KOMUTMA belirterek bu CMD'yi geçersiz kılabilirsiniz.

Görüntü aynı zamanda bir ENTRYPOINT belirtirse, CMD veya COMMAND ENTRYPOINT'e argüman olarak eklenir.

Yani istediğinizi yapmak için sadece bir cmd belirtin ve kullanmayı geçersiz kılın /bin/bash. Tamamen "boş" değil, ancak işin% 99 bitmesini sağlıyor.


Hata! Bir detayı gözden kaçırdım. Kısaltılması dışında --loginhiç -lsenin çözüm zaten alır gibi iyidir sanırım.
Simon Thum

İşte bugün gördüğüm eğlenceli bir şey: komut geçersiz kılınmadı, eklendi. İşte kabın içindeki PS. Eklediğim komutun "db'yi kurma" yı hatırladığını ve yerleşik komutun / usr / bin / geth olduğunu unutmayın. Ayrıca giriş noktasını "" olarak ayarlıyorum. 1 ? Ssl 0:00 /usr/bin/geth echo setting up db
Paul S

Liman işçisi referans bağlantısı artık çalışmıyor - bunun yerine bariz bir yer bulamıyor.
Chris Kimpton

Az önce düzelttim ama bulmayı da zor buldum; (
Simon Thum

15

Buraya gelen herkes için giriş noktası VE komutunu geçersiz kılmak üzere diğer komutu geçmek için, örneğin, giriş noktası komut dosyası yerine bash komutunu çalıştırın ve sonra parametrelerle başka bir komut çalıştırın (diğer cevaplardan 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/sholduğundan, burada kap içinde çalıştırmak istediğiniz herhangi bir komutu iletebilirsiniz. diğer görüntüler için büyük olasılıkla /bin/shalpin görüntüler /bin/bashiçindir.


1
sadece bir eklenti kabuğu komutları json tabanlı yazılı olmalıdır, bu yüzden tekli tırnak ile alıntı yapmak yerine '...'çift ​​tırnak işareti kullanın"..."
Jimmy Obonyo Abor

Ya da sadece istediğiniz kadar çok sayıda merkez argümanını iletin
Nick Roz

bu işe yaramaz gibi görünmüyor: "exec: \" - c \ ": çalıştırılabilir dosya $ PATH bulunamadı": bilinmiyor.
Richard,

Konteynerdeki yolu kontrol edin, belki de mevcut değildir. Görüntülerin çoğu var /bin/shama sizinki bu durumda olmayabilir.
Eylül’de
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.