2015-09-02 10 views
5

Mam obraz dokera programisty na podstawie Ubuntu: 14.04, którego używam do tworzenia aplikacji dla Ubuntu 14.04. Uruchamiam ten obraz, gdy maszyna uruchamia się z docker start image-nameJak ustawić bieżący katalog roboczy do uruchamiania dokera z wewnętrzną powłoką bash?

Mój katalog domowy był powiązany z opcją --volumes, gdy został utworzony.

Aby wprowadzić obraz mam alias zdefiniowany w .bash_aliases

alias d_enter="docker exec -ti ub1404-dev /bin/bash" 

Tak, aby wprowadzić obraz po prostu wpisać d_enter

Ale często zapominamy, aby uruchomić d_enter po wprowadzeniu długą drogę i chciałby d_enter, aby automatycznie przełączyć się do tego wewnętrznego katalogu.

Poniższe nie działają.

docker exec -ti ub1404-dev /bin/bash <(echo ". ~/.bashrc && cd $(pwd)") 

Czy istnieje inny sposób osiągnięcia pożądanego rezultatu?

Na przykład, jeśli bieżący katalog roboczy jest: /home/matt/dev/somepath/blabla

I wpisać d_enter, mój aktualny katalog roboczy obecnie staje: /home/matt co chcę zrobić dla bieżącego katalogu po Exec być /home/matt/dev/somepath/blabla

+1

To na pewno jest frustrujące, kiedy ludzie downvote bez pozostawienia komentarza. Jeśli jest coś, czego nie rozumiesz, powiedz to, a poprawię pytanie. Pytania podobne do problemów z podsystemem bash, takich jak ten, istnieją i jest to powszechny problem. Próbowałem postępować zgodnie z sugerowanymi odpowiedziami, ale nie działają one w moim przypadku. Chciałbym zrozumieć, dlaczego tak jest – Matt

Odpowiedz

1

Zdecydowanie hack, ale można zrobić coś takiego co d_enter funkcję powłoki (mogą pozostać alias ale jest łatwiejsze do utrzymania):

d_enter() { 
    pwd > ~/.docker_initial_pwd 
    docker exec -ti ub1404-dev /bin/bash 
} 

A potem w pojemniku na koncie użytkownika .bashrc, dodać coś takiego:

if [[ -f "${HOME}/.docker_initial_pwd ]]; then 
    cd $(cat "${HOME}/.docker_initial_pwd") 
fi 
0

można osiągnąć go z:
docker exec -it containerName sh -c "cd /var/www && /bin/bash"

Powiązane problemy