programing

도커 컨테이너의 실행 명령을 표시하는 방법

bestprogram 2023. 9. 9. 09:47

도커 컨테이너의 실행 명령을 표시하는 방법

저는 도커 컨테이너 설정을 위해 타사 GUI(Synology Docker Package)를 사용합니다.그러나 그 한계로 인해 명령줄에서 컨테이너를 실행해야 합니다.(포트를 바인딩할 다른 호스트 IP를 매핑합니다.)

이제 이미 수행된 설정이 많기 때문에 이 컨테이너를 시작하는 원래의 run 명령을 검색하고 포트 매핑 포트를 새 것으로 변경할 수 있습니다."docker run -p 80:8080 gitlab"

방법을 찾을 수 없습니다. 이벤트 사용 "docker inspect", 그런 정보는 제공되지 않습니다.

이 문제를 해결하기 위한 조언을 부탁드립니다.

그럼 엔지니어링 도커 실행 명령을 되돌리는 방법은?

명령을 . 은 을 가 은 하지 은 가 하지 0.1.2. 업데이트하려면 이를 따라야 합니다.언젠가는 이를 이용해 올바른 실행 명령을 얻을 수도 있을 것입니다.

$ 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 저장소: runlike

업데이트:

설치하지 않고 실행(Thanks @tilo)

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

아니면 가명을 설정해서 쉘의 프로파일에 넣거나

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

docker ps

runlike YOUR-CONTAINER

더 간단한(?) 대안은 내장된 Go 템플릿 기능을 사용하여 다음을 출력하는 이 도커 검사 템플릿을 실행하는 것입니다.docker run호환되는 명령어입니다.템플릿은 가장 일반적인 명령줄 옵션만 포함하지만 쉽게 확장할 수 있습니다.

이 솔루션은 도커 자체를 제외하고는 다른 툴에 의존하지 않습니다.

docker inspect \
  --format "$(curl -s https://gist.githubusercontent.com/efrecon/8ce9c75d518b6eb863f667442d7bc679/raw/run.tpl)" \
  name_or_id_of_your_running_container

도커 검사 사용:

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

jq를 사용하여 프로그래밍 방식으로 구문 분석할 수 있습니다.

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

Node 하여 Δ CLI Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ 를 하였습니다.docker run기존 컨테이너의 명령입니다.

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

예는 다음과 같습니다.

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

또한 링크와 마운트된 볼륨 및 기타 작업도 처리합니다.

현재로서는 매우 견고하지는 않지만, 언급된 다른 것들보다 더 많은 것을 처리할 수 있습니다. 그리고 그것은 제가 찾고 있던 것 중의 하나였습니다.

EDIT: 소프트웨어를 설치하지 않고 하나의 명령으로:

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

다음 명령을 사용하여 모든 컨테이너에 대한 인수를 가져옵니다.

docker inspect -f "{{.Name}} {{.Path}} {{.Args}}" $(docker ps -a -q)

현재는 'docker inspect'로 이동한 다음 run 명령을 수동으로 재생성해야 하는 것 같습니다.

이 작업을 위해 bash 스크립트를 작성하려고 시도하는 사람을 발견했습니다. https://gist.github.com/miracle2k/c85b7b077fdb8d54bc89

하지만 그것은 불완전하고 jq에 의존합니다.

현재 실행 중인 도커 서버 설정에 설치하지 않으려면 간단히 실행(바꾸기)할 수 있습니다.$CONTAINER_NAMErun 인수를 사용할 컨테이너 이름:

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"

(메소드의 경우)

아니면

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"

(메소드의 경우)

더 간단한 (강력한) 옵션은 bash-preexec과 같은 것을 사용하여 "docker run"으로 시작하는 명령을 캡처하는 것입니다.그런 다음 이러한 명령을 어딘가에 저장했다가 나중에 검색할 수 있습니다.

예를 들어 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="$@"
    [[ -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 $@
}

그러면 당신은 당신의 물건들을 실행할 수 있습니다.

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

출력되는 항목:

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

도커 실행 명령은 도커 파일이나 다른 도커 관련 문서에 지정되어 있지 않습니다.

컨테이너와 관련된 문서에서 예를 찾거나, (적어도 명령 및 포트 매핑의 경우) 도커가 실행된다는 것을 추론할 수 있습니다.docker ps -a(그렇다고 네게 가능성은 없겠지만)--volumes-from옵션)

체크도/usr/syno/etc/packages/Docker-GitLab/config

이것은 Synology에서 사용할 수 있는 gitlab 구성 자체와는 다릅니다./usr/syno/etc/packages/Docker/synology_gitlab.config

도커 실행 명령을 되돌리기 위해 다음 npm 패키지도 있습니다.

https://github.com/nexdrew/rekcod

@Chris_Lamb에서 언급한 바와 같이 도커 검사를 사용하여 이와 같은 내용을 확인할 수 있습니다.파이썬 사전에 이 정보를 로드하는 방법은 다음과 같습니다.

import subprocess,json
im_inspect = subprocess.check_output(["docker", "image", "inspect", "datalab-nginx-ui"])
# print(im_inspect.decode("utf-8") ) #if you want to print it
d_inspect = json.loads(im_inspect)
d_inspect
d_inspect[-1]['ContainerConfig']['Cmd']

예제 실행:

모든 도커 파일이 여기에 있습니다. 예를 들어 cmd와 마운트를 찾을 수 있습니다.ls -la /proc/1그냥 까불지 마!

cat /proc/1/cmdline
nginx: master process nginx -g daemon off;

대부분의 답변이 모든 상황에서 어떻게 제3자에게 의존하는지 궁금합니다.docker inspectJSON. 그럴 필요도 없어요.jq부터dockerJSON 포맷 옵션이 있습니다.

사용하다

docker inspect  -f 'docker run --name {{.Name}} -v {{join .HostConfig.Binds " "}} -p {{.HostConfig.PortBindings}} {{.Config.Image}} {{join .Config.Cmd " "}}' my-osrm-image

예: 실제 bash 명령어의 경우

docker run -t -i --name my-osrm-image -v "/custom/path/to/data-osrm:/data" -p 80:5000 osrm/osrm-backend osrm-routed --algorithm mld /data/europe-latest.osrm

위의docker inspect명령이 출력됩니다.

 docker run --name /my-osrm-image -v /custom/path/to/data-osrm:/data -p map[5000/tcp:[{ 80}]] osrm/osrm-backend osrm-routed --algorithm mld /data/europe-latest.osrm

약간의 청소가 필요하지만 모든 것이 거기에 있고, 그에 따라 추가 옵션을 포함하도록 확장할 수 있습니다.docker inspectJSON 출력.출력 형식에 대해서는 이 설명서도 참조하십시오.

언급URL : https://stackoverflow.com/questions/32758793/how-to-show-the-run-command-of-a-docker-container