Подтвердить что ты не робот

Как показать команду запуска контейнера докера

Я использую сторонний GUI (пакет Synology Docker) для настройки контейнера докеров. Однако это ограничение заставляет меня запускать контейнер из командной строки. (Я хочу сопоставить другой IP-адрес хоста для привязки порта)

Теперь, поскольку есть много настроек, которые уже были выполнены, я хотел бы получить исходную команду запуска, которая запускает этот контейнер, а затем я могу изменить порт сопоставления портов на новый. например. "docker run -p 80:8080 gitlab"

Я не могу найти способ сделать это, использовать событие "докер-инспектор", никакой такой информации не предоставляется.

Просьба дать некоторые рекомендации для решения этой проблемы.

4b9b3361

Ответ 1

Так как же изменить инженерную команду Docker Run?

Существует github-репозиторий, который пытается отменить инженерную команду запуска 0.1.2, но в настоящее время она не идеальна, версия 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

Обновления:

Запустить без установки (спасибо @tilo)

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

Ответ 2

Я написал простой инструмент CLI на основе Node для генерации команды 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"

Также обрабатывает ссылки и подключенные тома и другие вещи.

Не супер надежный в данный момент, но обрабатывает больше, чем некоторые другие упомянутые вещи, и это было больше из того, что я искал.

РЕДАКТИРОВАТЬ: в одной команде, без установки какого-либо программного обеспечения:

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

Ответ 3

Используйте Docker для проверки:

$ 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

Ответ 4

Более простой (?) Альтернативой является запуск этого шаблона проверки Docker, который использует встроенные возможности шаблонов Go для вывода совместимой команды docker run. Шаблон охватывает только самые обычные параметры командной строки, но его можно легко расширить.

Это решение не зависит от других инструментов, кроме самого докера.

Ответ 5

В настоящее время кажется, что нам нужно пройти "проверку докеров", а затем вручную заново создать команду запуска.

Я нашел, что кто-то пытается написать bash script для этого: https://gist.github.com/miracle2k/c85b7b077fdb8d54bc89

но он неполный и зависит от jq.

Ответ 6

Что может быть более простым (надежным) вариантом, было бы использовать что-то вроде bash-preexec для захвата команд, начинающихся с "запуска докеров" ". Затем вы можете сохранить эти команды и получить их позже.

Например, вы можете добавить что-то подобное в свой профиль 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]
}

Тогда вы можете просто запустить свои вещи:

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

Ответ 7

Используйте следующую команду, чтобы получить аргументы для всех контейнеров, которые проверяет докер -f "{{.Name}} {{.Path}} {{.Args}}" $ (docker ps -a -q)

Ответ 8

Эта команда запуска docker не указана в файле Docker или любых других документах, связанных с докерами.

Либо вы найдете пример в документации, связанной с вашим контейнером, либо вы можете сделать вывод, что docker запускается с (по крайней мере для сопоставления команд и портов) a docker ps -a (но это не даст вам возможного --volumes-from параметры)

Также проверьте /usr/syno/etc/packages/Docker-GitLab/config

Это отличается от самой конфигурации gitlab, которая по Synology доступна в /usr/syno/etc/packages/Docker/synology_gitlab.config

Ответ 9

Если вы не хотите устанавливать что-либо в текущую текущую настройку сервера Docker, вы можете просто выполнить (замените $CONTAINER_NAME на имя контейнера, которое вы хотите иметь аргументы):

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"

(для метода rekcod)

или

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)

Ответ 10

Чтобы отменить команду docker run, также существует следующий пакет npm.

https://github.com/nexdrew/rekcod