Docker konteynerinin çalıştır komutu nasıl gösterilir?


114

Docker konteyner kurmak için üçüncü taraf bir GUI (Synology Docker paketi) kullanıyorum. Ancak, sınırlaması, kabı komut satırından çalıştırmamı gerektiriyor. (Bağlantı noktasını bağlamak için başka bir ana bilgisayar IP'sini eşlemek istiyorum)

Şimdi, zaten yapılmış birçok ayar olduğu için, bu konteyneri başlatan orijinal çalıştırma komutunu almak istiyorum, ardından port eşleştirme portunu yenisiyle değiştirebilirim. Örneğin. " docker run -p 80:8080 gitlab"

Bunu yapmanın bir yolunu bulamıyorum, olay kullanımı "docker inspect", böyle bir bilgi sağlanmadı.

Lütfen bu sorunu çözmek için bazı önerilerde bulunun.



7
@capitalistpug bu soru bunun tam tersi - bu konteynerin içindeki komutla ilgili , bu konteyneri başlatmak için kullanılan soru hakkında .
Niels Keurentjes

tarih | grep 'docker run'
Adrian Mayıs

1
Docker'ın bunun için yerleşik bir seçeneğe sahip olmaması şaşırtıcı.
Macindows

Yanıtlar:


143

Peki mühendislik docker çalıştırma komutu nasıl tersine çevrilir?

Docker run komutunu tersine çevirmeye çalışan bir github deposu var, ancak şu anda mükemmel değil, version is 0.1.2. Güncelleme için takip etmelisiniz. Belki bir gün onunla doğru çalıştır komutunu almak için kullanabilirsiniz.

$ sudo pip install runlike

# run the ubuntu image
$ docker run -ti ubuntu bash

$ docker ps -a  
# suppose you get the container ID 1dfff2ba0226

# Run runlike to get the docker run command. 
$ runlike 1dfff2ba0226
docker run --name=elated_cray -t ubuntu bash

Github deposu: runlike

Güncellemeler :

Yüklemeden çalıştırın (teşekkürler @tilo)

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
    assaflavie/runlike YOUR-CONTAINER

veya takma ad ayarla

alias runlike="docker run --rm -v/var/run/docker.sock:/var/run/docker.sock 
 assaflavie/runlike"

runlike YOUR-CONTAINER

1
Synology DSM'de çalıştırmak gibi kurmak biraz zor, ama deneyeceğim. Teşekkür ederim!
Jack Yu

1
Sudo pip install runlike
Simon

@JackYu, Sysnology'ye yüklemeyi başardınız mı?
xedo

runlike bize çok zaman kazandırıyor => ❤️
mtt2p

21
gibi koş:docker run -v /var/run/docker.sock:/var/run/docker.sock \ assaflavie/runlike YOUR-CONTAINER
Tilo

36

Docker inspect'i kullanın :

$ docker inspect foo/bar
[
    {
        # …
        "Config": {
            # …
            "Cmd": [
                "/usr/local/bin/script.sh"
            ],
            # …
        }
    }
]

Bunu programlı olarak jq ile çözümleyebilirsiniz :

$ docker inspect foo/bar | jq -r '.[0]["Config"]["Cmd"][0]'
/usr/local/bin/script.sh

1
evet bende jq tercih komuta hafif çimdik (a yazıp IMHO kolay okunur bit): docker inspect <CONTAINER> | jq ".[0].Config.Cmd"
Paul Carroll

1
"Cmd": null,Belki bu yalnızca konteyner docker daemon olarak otomatik olarak başlatılmadıysa işe yarar?
Michael

28

docker runMevcut bir kaptan bir komut oluşturmak için basit bir Düğüm tabanlı CLI aracı yazdım .

https://www.npmjs.com/package/rekcod

İşte bir örnek:

$ npm i -g rekcod
$ rekcod redis_container

docker run -d --name redis_container --restart always -h a44159e148e1 \
--expose 6379/tcp -e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
-e REDIS_VERSION=3.0.7 -e REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.0.7.tar.gz \
-e REDIS_DOWNLOAD_SHA1=e56b4b7e033ae8dbf311f9191cf6fdf3ae974d1c \
--entrypoint "/entrypoint.sh" redis "redis-server"

Ayrıca bağlantıları ve bağlı birimleri ve diğer şeyleri de işler.

Şu anda süper sağlam değil, ancak bahsedilen diğer bazı şeylerden daha fazlasını idare ediyor ve aradığım şeyden daha fazlasıydı.

DÜZENLEME: Herhangi bir yazılım yüklemeden tek bir komutla:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod redis_container

7

Daha basit (?) Bir alternatif, uyumlu bir komut çıktı vermek için yerleşik Go şablon oluşturma yeteneklerini kullanan bu docker inspect şablonunu çalıştırmaktır docker run. Şablon yalnızca en genel komut satırı seçeneklerini kapsar, ancak kolayca genişletilebilir.

Bu çözümün docker dışında başka araçlara bağımlılığı yoktur.


5

Tüm kapsayıcılar docker inspect -f "{{.Name}} {{.Path}} {{.Args}}" $ (docker ps -a -q) için bağımsız değişkenleri almak için aşağıdaki komutu kullanın


1
Bu, konteynerin nasıl başlatıldığını değil, konteynerin içinde ne çalıştığına ilişkin komut ve argümanları listeler (yani, bundan 4 dakika sonra çalıştırma benzeri yanıtı gönderdiğiniz soruyu yanıtlayın! :)).
ÖzgürH


4

Mevcut çalışan Docker sunucu kurulumunuza herhangi bir şey yüklemek istemiyorsanız, basitçe çalıştırabilirsiniz ( $CONTAINER_NAMEçalıştırma bağımsız değişkenlerine sahip olmak istediğiniz kapsayıcı adı ile değiştirin ):

docker run -it --rm --volume /var/run/docker.sock:/var/run/docker.sock --privileged docker sh -c "apk add --no-cache nodejs nodejs-npm && npm i -g rekcod && rekcod $CONTAINER_NAME"

( rekcodyöntem için )

veya

docker run -it --rm --volume /var/run/docker.sock:/var/run/docker.sock --privileged docker sh -c "apk add --no-cache py-pip && pip install runlike && runlike $CONTAINER_NAME"

( runlike yöntem için )


Ben arasındaki boşluk olması gerektiğini düşünüyorum -itve--rm
IpsRich

@IpsRich haklısın, cevabımı değiştirdim teşekkürler!
Anthony O.

3

Daha basit (sağlam) bir seçenek , "docker run" ile başlayan komutları yakalamak için bash-preexec gibi bir şey kullanmak olabilir . Daha sonra bu komutları bir yerde saklayabilir ve daha sonra geri alabilirsiniz.

Örneğin, bash profilinize şuna benzer bir şey ekleyebilirsiniz:

[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh
docker_run_history=~/.docker_run_history
docker_clear_history(){
    echo -n > $docker_run_history
}
docker_search_history(){
    search_for="$@"
    [[ -z $search_for ]] && search_for=".*"
    \cat $docker_run_history | grep "$search_for" | tail -1
}
docker_ps_mod(){
    for c in $(docker ps --format "{{.Image}}"); do 
        echo "Container $c was run using:"
        echo -e "\t$(docker_search_history $c)"
    done
}
docker_hook(){
    if [[ $@ =~ ^"docker run".*$ ]]; then
        \echo "$@" >> $docker_run_history 
    fi
}
preexec(){ 
    docker_hook $@
}

O zaman eşyalarını çalıştırabilirsin:

source ~/.bash_profile
docker run -it --rm -v $(pwd)/data:/data -p 8080:80 image
docker run -d daemon
docker_ps_mod

Hangi çıktılar:

Container image was run using:
    docker run -it --rm -v $(pwd)/data:/data -p 8080:80 image
Container daemon was run using:
    docker run -d daemon

İlginç bir alternatif. +1
VonC

Docker'ın komut geçmişini kaydetmemesi ve bunun gibi basit bir borulamaya sahip olması saçmadır.
Macindows

2

Docker run komutu Dockerfile veya docker ile ilgili diğer belgelerde belirtilmez.

Ya konteynerinizle ilişkili belgelerde bir örnek bulursunuz ya da docker'ın (en azından komut ve port eşleştirme için) a ile çalıştığını anlayabilirsiniz docker ps -a(ancak bu size olası --volumes-fromseçenekleri vermez )

Ayrıca kontrol edin /usr/syno/etc/packages/Docker-GitLab/config

Bu , Synology'de bulunan gitlab yapılandırmasının kendisinden farklıdır ./usr/syno/etc/packages/Docker/synology_gitlab.config


Synology Docker'ın yapılandırma dosyası konumundan bahsettiğiniz için teşekkür ederiz. Ancak yapılandırma daha fazla yardımcı olamaz. İçeriği, bir kapsayıcıyı Web kullanıcı arayüzünden dışa aktardığınızla hemen hemen aynıdır.
Jack Yu


0

Tüm docker dosyaları burada cmd ve bağlar bulabilirsiniz, örneğin ls -la /proc/1 sadece cat it

cat /proc/1/cmdline
nginx: master process nginx -g daemon off;
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.