拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何在Docker 中更改目录

如何在Docker 中更改目录

白鹭 - 2022-09-08 2151 0 2

一、概述

Docker 镜像包含一组顺序指令,用作构建容器的模板。在本教程中,我们将学习如何在构建Docker 镜像或使用镜像运行容器时更改目录

2.使用WORKDIR指令

首先,让我们从使用现成的ubuntu:latest映像生成Docker 容器开始:

$ docker run -it ubuntu:latest
 [email protected]:/# pwd
 /

我们可以看到,容器一启动,当前目录就设置为/.

接下来,假设我们要在容器启动时将此目录更改为/tmp我们可以通过在使用ubuntu:latest作为基础镜像的自定义镜像中使用WORKDIR指令来做到这一点:

$ cat custom-ubuntu-v1.dockerfile
 FROM ubuntu:latest
 WORKDIR /tmp

在我们可以使用这个镜像运行一个容器之前,我们需要构建这个镜像。因此,让我们继续构建custom-ubuntu:v1映像:

$ docker build -t custom-ubuntu:v1 - < ./custom-ubuntu-v1.dockerfile

最后,让我们使用custom-ubuntu:v1镜像运行一个容器并验证当前目录:

$ docker run -it custom-ubuntu:v1
 [email protected]:/tmp# pwd
 /tmp

看起来我们做对了!

3. 使用–workdir选项

对于大多数我们想要在构建Docker 映像时更改目录的情况,建议使用WORKDIR指令。然而,如果我们的用例仅限于在运行容器时更改目录,那么我们可以通过使用–workdir选项来实现

$ docker run --workdir /tmp -it ubuntu:latest
 [email protected]:/tmp# pwd
 /tmp

看看这个,我们可以欣赏到命令的简洁性以及在这种情况下我们不必创建自定义图像这一事实。

4. 使用cd命令

在Linux 中,cd命令是大多数用例更改目录的标准方法。同样,当使用一些docker 指令(例如RUNCMDENTRYPOINT)时,我们可以使用cd命令在上下文中更改当前命令的目录。

让我们首先编写custom-ubuntu-v2.dockerfile以使用RUN指令和cd命令:

FROM ubuntu:latest
 RUN cd /tmp && echo "sample text" > data.txt

我们可以看到其意图是将“示例文本”写入/tmp/data.txt文件。

接下来,让我们添加ENTRYPOINT指令以在容器启动时将bash作为默认命令运行。此外,我们使用cd命令将当前目录更改为/tmp目录:

ENTRYPOINT ["sh", "-c", "cd /tmp && bash"]

继续,让我们构建自定义图像:

$ docker build -t custom-ubuntu:v2 - < ./custom-ubuntu-v2.dockerfile

最后,让我们使用custom-ubuntu:v2镜像运行容器并验证命令的执行:

$ docker run -it custom-ubuntu:v2
 [email protected]:/tmp# pwd
 /tmp
 [email protected]:/tmp# cat /tmp/data.txt
 random text

我们可以看到两个更改目录命令的结果都符合预期。此外,我们必须记住WORKDIR仍然是推荐的方式。不过,对于简单的用例,我们可以将cd命令与RUNENTRYPOINTCMD指令结合使用

5. 结论

在本文中,我们学习了在使用Docker 映像或启动容器时更改目录的不同方法


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *