2015-09-24 21 views
24

Uso una GUI di terze parti (pacchetto Synology Docker) per l'installazione di un contenitore finestra mobile. Tuttavia, la sua limitazione mi rende necessario eseguire il contenitore dalla riga di comando. (Voglio mappare un altro host IP per associare la porta)Come visualizzare il comando di esecuzione di un contenitore finestra mobile

Ora, poiché ci sono molte impostazioni già fatte, vorrei recuperare il comando di esecuzione originale che avvia questo contenitore, quindi posso cambiare la mappatura delle porte porto a nuovo. per esempio. "docker run -p 80:8080 gitlab"

Non riesco a trovare il modo di farlo, l'uso dell'evento "finestra di dialogo ispeziona", nessuna informazione fornita.

Si prega di fornire qualche consiglio per risolvere questo problema.

+0

Possibile duplicato del [Visualizza intera comando della corsa/fermato il recipiente in Docker] (http://stackoverflow.com/questions/27380641/see-full-command -of-running-stopped-container-in-docker) – ksindi

+4

@capitalistpug quella domanda è l'esatto opposto di questa: riguarda il comando * dentro * il contenitore, si tratta di quello usato per * avviare * il contenitore. –

risposta

30

Così come l'ingegneria comando di marcia finestra mobile inversa?

C'è un repository github che tenta di invertire il comando di esecuzione della finestra mobile, ma al momento non è perfetto, la versione è 0.1.2. Dovresti seguirlo per l'aggiornamento. Forse un giorno puoi usarlo per ottenere il comando di esecuzione corretto con esso.

$ 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 repository: runlike

+1

È un po 'difficile da configurare runlike su Synology DSM, ma ci proverò. Grazie! –

+1

Ho dovuto usare sudo pip install runlike – Simon

+0

@JackYu hai ottenuto l'installazione in Sysnology? – xedo

1

Il comando di esecuzione della finestra mobile non è specificato nel file Dockerfile o in qualsiasi altro documento relativo alla finestra mobile.

O si trova un esempio nella documentazione associata al proprio contenitore o si può inferire che la finestra mobile venga eseguita con (almeno per il comando e la mappatura delle porte) a docker ps -a (ma ciò non darà le possibili opzioni --volumes-from)

controllare anche /usr/syno/etc/packages/Docker-GitLab/config

Questa differire dal gitlab config itself, which on Synology è disponibile in /usr/syno/etc/packages/Docker/synology_gitlab.config

+0

Grazie per aver menzionato il percorso del file di configurazione di Synology Docker. Ma la configurazione non può aiutare molto di più. Il suo contenuto è molto simile all'esportazione di un contenitore dall'interfaccia utente web. –

3

Attualmente sembra che abbiamo di andare 'finestra mobile ispezionare' e quindi ricreare manualmente il comando di marcia.

ho trovato qualcuno tenta di scrivere uno script bash per fare questo: https://gist.github.com/miracle2k/c85b7b077fdb8d54bc89

ma è incompleta e dipende JQ.

10

Ho scritto un semplice strumento CLI basato su nodo per generare un comando docker run da un contenitore esistente.

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

Ecco un esempio:

$ 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" 

gestisce anche i collegamenti e montati volumi e altre cose.

Non molto robusto al momento, ma gestisce più di alcune delle altre cose menzionate, ed era più di quello che stavo cercando.

2

Un'alternativa più semplice (?) È quella di eseguire this docker inspect template, che utilizza le funzionalità incorporate del modello Go per generare un comando compatibile con docker run.Il modello copre solo le più comuni opzioni da riga di comando, ma può essere facilmente esteso.

Questa soluzione non ha dipendenze da altri strumenti, ad eccezione della finestra mobile stessa.

2

Quale potrebbe essere una più semplice (robusta) opzione sarebbe utilizzare qualcosa come bash-preexec per acquisire comandi che iniziano con "finestra mobile". Potresti quindi memorizzare questi comandi da qualche parte e recuperarli in seguito.

Ad esempio, si potrebbe aggiungere qualcosa di simile nel tuo profilo bash:

[[ -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="[email protected]" 
    [[ -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 [[ [email protected] =~ ^"docker run".*$ ]]; then 
     \echo "[email protected]" >> $docker_run_history 
    fi 
} 
preexec(){ 
    docker_hook [email protected] 
} 

allora si potrebbe semplicemente eseguire le tue cose:

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

quali uscite:

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 
+0

Alternativa interessante. +1 – VonC

3

Utilizza docker inspect:

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

È possibile programatically analizzare questo con jq:

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

Se non si desidera installare nulla nel vostro eseguire l'installazione del server Docker corrente, è possibile eseguire semplicemente (sostituire $CONTAINER_NAME con il nome del contenitore che si desidera avere gli argomenti seduta):

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" 

(per la rekcod method)

o

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" 

(per la runlike method)

Problemi correlati