Korzystam z graficznego interfejsu użytkownika innej firmy (pakietu Synology Docker), aby skonfigurować kontener Docker. Jednak to ograniczenie sprawia, że muszę uruchamiać kontener z wiersza poleceń. (Chcę zmapować inny adres IP hosta, aby powiązać port)
Teraz, ponieważ istnieje wiele ustawień, które już zostały wykonane, chciałbym pobrać oryginalne polecenie uruchomienia, które uruchamia ten kontener, a następnie mogę zmienić port mapowania portów na nowy. na przykład. „ docker run -p 80:8080 gitlab
”
Nie mogę znaleźć sposobu, aby to zrobić, użyj zdarzenia „docker inspect”, brak takich informacji.
Proszę o porady, jak rozwiązać ten problem.
Odpowiedzi:
Istnieje repozytorium github, które próbuje odwrócić komendę docker run, ale obecnie nie jest idealne, wersja jest
0.1.2
. Powinieneś go śledzić w celu aktualizacji. Może pewnego dnia będziesz mógł go użyć, aby uzyskać z nim prawidłowe polecenie uruchomienia.Repozytorium Github: runlike
Aktualizacje :
Uruchom bez instalowania (dzięki @tilo)
lub ustaw alias
źródło
docker run -v /var/run/docker.sock:/var/run/docker.sock \ assaflavie/runlike YOUR-CONTAINER
Użyj inspekcji docker :
Możesz programowo przeanalizować to za pomocą jq :
źródło
docker inspect <CONTAINER> | jq ".[0].Config.Cmd"
"Cmd": null,
Może działa to tylko wtedy, gdy kontener nie został uruchomiony automatycznie jako demon Dockera?Napisałem proste narzędzie CLI oparte na Node, aby wygenerować
docker run
polecenie z istniejącego kontenera.https://www.npmjs.com/package/rekcod
Oto przykład:
Obsługuje również łącza, zamontowane woluminy i inne rzeczy.
W tej chwili nie jest super wytrzymały, ale radzi sobie lepiej niż niektóre z innych wymienionych rzeczy i było to bardziej tego, czego szukałem.
EDYCJA: jednym poleceniem, bez instalowania oprogramowania:
źródło
Prostszą (?) Alternatywą jest uruchomienie tego szablonu Docker inspect , który wykorzystuje wbudowane możliwości tworzenia szablonów Go w celu wyprowadzenia
docker run
zgodnego polecenia. Szablon obejmuje tylko najbardziej typowe opcje wiersza poleceń, ale można go łatwo rozszerzyć.To rozwiązanie nie ma żadnych zależności od innych narzędzi, z wyjątkiem samego dockera.
źródło
Użyj następującego polecenia, aby pobrać argumenty dla wszystkich kontenerów Docker inspect -f "{{.Name}} {{.Path}} {{.Args}}" $ (docker ps -a -q)
źródło
Obecnie wydaje się, że musimy przejść do „docker inspect”, a następnie ręcznie odtworzyć polecenie uruchomienia.
Znalazłem kogoś, kto próbował napisać skrypt bash, aby to zrobić: https://gist.github.com/miracle2k/c85b7b077fdb8d54bc89
ale jest niekompletny i zależy od jq.
źródło
Prostszą (solidniejszą) opcją byłoby użycie czegoś takiego jak bash-preexec do przechwytywania poleceń zaczynających się od „docker run”. Możesz wtedy przechowywać te polecenia gdzieś i odzyskać je później.
Na przykład możesz dodać coś takiego w swoim profilu bash:
Wtedy możesz po prostu uruchomić swoje rzeczy:
Które wyjścia:
źródło
Jeśli nie chcesz niczego instalować w bieżącej konfiguracji serwera Docker, możesz po prostu wykonać (zastąpić
$CONTAINER_NAME
nazwą kontenera, dla którego chcesz mieć argumenty uruchamiania):(dla
rekcod
metody )lub
(dla
runlike
metody )źródło
To polecenie docker run nie jest określone w pliku Dockerfile ani w innych dokumentach związanych z platformą Docker.
Albo znajdziesz przykład w dokumentacji związanej z twoim kontenerem, albo możesz wywnioskować, że docker działa z (przynajmniej dla polecenia i mapowania portów) a
docker ps -a
(ale to nie da ci możliwego--volumes-from
opcji)Sprawdź również
/usr/syno/etc/packages/Docker-GitLab/config
Różni się to od samej konfiguracji gitlab, która w Synology jest dostępna w
/usr/syno/etc/packages/Docker/synology_gitlab.config
źródło
Aby cofnąć polecenie docker run, istnieje również następujący pakiet npm.
https://github.com/nexdrew/rekcod
źródło
Wszystkie pliki dockera są tutaj, możesz znaleźć cmd i montuje na przykład
ls -la /proc/1
po prostu cat itźródło