如何使用内部bash shell为docker exec设置当前工作目录?

时间:2015-09-02 02:08:53

标签: bash docker

我有一个基于ubuntu的开发者docker镜像:14.04,我用它为Ubuntu 14.04开发应用程序。当机器使用docker start image-name

启动时,我会启动此图像

我的主目录在最初创建时使用--volumes绑定挂载。

要输入图像,我在.bash_aliases

中定义了别名
alias d_enter="docker exec -ti ub1404-dev /bin/bash"

因此,要输入图像,我只需输入d_enter

但我经常忘记在输入长路径后运行d_enter,并希望d_enter自动切换到该内部目录。

以下内容无效。

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

还有另一种方法可以达到预期效果吗?

例如,如果我当前的工作目录是:/home/matt/dev/somepath/blabla

我键入d_enter,我当前的工作目录当前变为:/home/matt exec为/home/matt/dev/somepath/blabla后我想要为当前目录做什么

4 个答案:

答案 0 :(得分:3)

您可以通过以下方式实现:
docker exec -it containerName sh -c "cd /var/www && /bin/bash"

答案 1 :(得分:1)

绝对是一个黑客,但你可以做一些像d_enter shell函数(可以保留别名,但这更容易维护):

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

然后在您的用户帐户.bashrc的容器中添加以下内容:

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

答案 2 :(得分:1)

从API 1.35+开始,您可以使用-w--workdir)选项:

docker exec -w /my/dir container_name command

https://docs.docker.com/engine/reference/commandline/exec/

答案 3 :(得分:1)

构建图像时,可以在Dockerfile中指定WORKDIR variable

WORKDIR /var/www/html