TP-DR
docker ps --no-trunc
ve docker inspect CONTAINER
iletilen komutun yanı sıra, kapsayıcıyı başlatmak için yürütülen giriş noktasını sağlayın, ancak ${ANY_VAR}
kap ortamı değişkenleri çözümlenmiş olarak yazdırılmadığı için bazı bölümleri kaçırabilir .
Bunun üstesinden gelmek docker inspect CONTAINER
, bir avantajı vardır, çünkü aynı zamanda env değişkenlerini ve kapta tanımlanan değerlerini Config.Env
mülkten ayırmaya da izin verir .
docker ps
ve docker inspect
yürütülen giriş noktası ve komutu hakkında bilgi sağlar. Genellikle, bu .sh
kap tarafından başlatılan "gerçek" program değil , bir sarıcı giriş noktası komut dosyasıdır ( ). Bununla ilgili bilgi almak için, işlem bilgilerini ps
veya /proc/1/cmdline
yardımını isteyin.
1) docker ps --no-trunc
Giriş noktasını ve çalışan tüm kapsayıcılar için yürütülen komutu yazdırır. Giriş noktasına iletilen komutu yazdırırken (bunu geçersek), docker env değişkenlerinin ( $FOO
veya gibi ${FOO}
) değerini göstermez .
Kaplarımız env değişkenleri kullanıyorsa, yeterli olmayabilir.
Örneğin, bir alp kabı çalıştırın:
docker run --name alpine-example -e MY_VAR=/var alpine:latest sh -c 'ls $MY_VAR'
Docker -ps kullanırken aşağıdaki gibi:
docker ps -a --filter adı = alp-örneği --no-trunc
Yazdırır:
KONTEYNER KİMLİĞİ GÖRÜNTÜ KOMUTU OLUŞTURULAN DURUM LİMANLARI İSİMLERİ
5b064a6de6d8417 ... alpine: en son "sh -c 'ls $ MY_VAR'" 2 dakika önce Çıkış (0) 2 dakika önce alpine-example
Komutun giriş noktasına aktarıldığını görüyoruz: sh -c 'ls $MY_VAR'
ancak $MY_VAR
gerçekten çözülmedi.
2) docker inspect CONTAINER
Alpin örnek kabını incelediğimizde:
docker inspect alpine-example | grep -4 Cmd
Komut da orada ancak hala env değişkeni değerini görmüyoruz:
"Cmd": [
"sh",
"-c",
"ls $MY_VAR"
],
Aslında, bu docker komutlarıyla enterpolasyonlu değişkenleri göremedik.
Bir takas olarak, docker incelemesi olan bir konteyner için hem komut hem de env değişkenlerini ayrı ayrı görüntüleyebiliriz:
docker inspect alpine-example | grep -4 -E "Cmd|Env"
Bu yazdırır:
"Env": [
"MY_VAR=/var",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"sh",
"-c",
"ls $MY_VAR"
]
Daha yapıcı bir yol, oluşturulacak JSON özniteliklerini belirtmeye izin veren --format
bayrağını kullanmak olacaktır docker inspect
:
docker inspect --format '{{.Name}} {{.Config.Cmd}} {{ (.Config.Env) }}' alpine-example
Bu çıktı:
/ alp-example [sh -c ls $ MY_VAR] [MY_VAR = / var PATH = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin]
3) Çalıştırılan kaplar için başlatılan işlemi kabın kendisinden alın
Docker tarafından yürütülen giriş noktası ve komut yardımcı olabilir, ancak bazı durumlarda bu yeterli değildir, çünkü bu yalnızca .sh
gerçek / çekirdek işlemini başlatmaktan sorumlu bir sarıcı giriş noktası komut dosyasıdır ( ).
Örneğin, bir Nexus kapsayıcısını çalıştırdığımda, kapsayıcıyı çalıştırmak için yürütülen ve gösterilen komut "sh -c ${SONATYPE_DIR}/start-nexus-repository-manager.sh"
.
PostgreSQL için "docker-entrypoint.sh postgres"
.
Daha fazla bilgi almak için, çalışan bir kapsayıcı üzerinde çalışabiliriz
docker exec CONTAINER ps aux
.
Bizi ilgilendirmeyecek başka süreçler de basabilir.
Giriş noktası tarafından başlatılan ilk işlemi daraltmak için şunları yapabiliriz:
docker exec CONTAINER ps -1
Belirttiğim 1
GirişNoktası tarafından yürütülen işlem genellikle ile biridir çünkü 1
id.
Olmadan ps
, hala bilgileri bulabiliriz /proc/1/cmdline
(Linux dağıtımlarının çoğunda, ancak hepsinde değil). Örneğin :
docker exec CONTAINER cat /proc/1/cmdline | sed -e "s/\x00/ /g"; echo
Kapsayıcıyı başlatan docker ana bilgisayarına erişimimiz varsa, giriş noktası tarafından yürütülen işlemin tam komutunu almanın başka bir yolu:: execute ps -PID
burada PID, Docker arka plan programı tarafından kapsayıcıyı çalıştırmak için oluşturulan yerel işlemdir:
ps -$(docker container inspect --format '{{.State.Pid}}' CONTAINER)
Docker PS ile kullanıcı dostu biçimlendirme
docker ps --no-trunc
okunması her zaman kolay değildir.
Yazdırılacak sütunları ve tablo biçiminde belirtmek onu daha iyi hale getirebilir:
docker ps --no-trunc --format "table{{.Names}}\t{{.CreatedAt}}\t{{.Command}}"
Bir takma ad oluşturmak aşağıdakilere yardımcı olabilir:
alias dps='docker ps --no-trunc --format "table{{.Names}}\t{{.CreatedAt}}\t{{.Command}}"'