首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对docker文件系统感到困惑

对docker文件系统感到困惑
EN

Stack Overflow用户
提问于 2018-06-22 18:26:48
回答 3查看 53关注 0票数 0

刚刚开始使用docker。我已经创建了一个镜像,启动了一个容器,但当我写入容器中的文件时,它会出现在我的本地磁盘上。我很困惑为什么会这样,如果是这样的话,我怎么可能运行一个镜像的许多实例。

这就是我要做的

代码语言:javascript
复制
docker container ls
 CONTAINER ID        IMAGE               COMMAND                  
 CREATED             STATUS              PORTS                    NAMES
 5bf6d45b4f79        docker_1_web        "bundle exec rails s…"   About an hour ago   Up About an hour    0.0.0.0:3000->3000/tcp   docker_1_web_1
 d5d0991da014        postgres            "docker-entrypoint.s…"   About an hour ago   Up About an hour    5432/tcp                 docker_1_db_1

然后

代码语言:javascript
复制
docker exec -it 5bf6d45b4f79 echo "hello" > temp.txt

代码语言:javascript
复制
docker exec -it 5bf6d45b4f79 cat temp.txt
hello

但是在我的本地磁盘上的Mac命令行中

代码语言:javascript
复制
cat temp.txt
hello

在我的Mac命令行上紧跟着的是

代码语言:javascript
复制
echo "goodbye" >> temp.txt
cat temp.txt
hello
goodbye

然后在容器中

代码语言:javascript
复制
docker exec -it 5bf6d45b4f79 cat temp.txt
hello
goodbye

啊!怎么会这样?我认为docker容器写入了它们自己的文件系统。所以我完全迷惑了。

这也意味着我不能运行镜像的多个实例,因为它们都会写入相同的文件。

EN

回答 3

Stack Overflow用户

发布于 2018-06-22 18:56:49

让我们稍微澄清一下:

当你这样做的时候:

docker exec -it 5bf6d45b4f79 temp.txt " hello“> docker exec -it 5bf6d45b4f79 cat temp.txt hello

您在容器中执行echo "hello",但标准输出存储在主机中。所以,在你的主机上看到temp.txt是很正常的。

如果您想将temp.txt保存在容器内,请尝试:

代码语言:javascript
复制
docker exec -it 5bf6d45b4f79 bash -c "echo 'hello' > temp.txt"

并且temp.txt将在您的容器工作目录中生成。

当你这样做的时候:

但是在我的本地磁盘上的Mac命令行中

在我的Mac命令行上,cat temp.txt hello后面跟着echo“再见”>> temp.txt cat temp.txt你好再见

然后在容器中

temp.txt exec -it 5bf6d45b4f79猫docker你好再见

您正在共享temp.txt,可能它是在主机和docker之间共享的docker volume中生成的

票数 3
EN

Stack Overflow用户

发布于 2018-06-22 18:49:44

代码语言:javascript
复制
docker exec -it 5bf6d45b4f79 echo "hello" > temp.txt

让您的容器打印hello,然后> temp.txt获取此输出,并在主机上生成一个文件。

要让您的容器打印hello,然后在本身的中创建一个,您必须使用:

代码语言:javascript
复制
docker container exec -it <your_container_name> sh -c 'echo "hello" > temp.txt'

解释:

sh -c在容器中创建一个新的外壳并运行echo "hello" > temp.txt'。这意味着> temp.txt部件将由该外壳程序处理,因此该文件将在容器中创建。

按照您尝试的方式,它是您的主机的外壳程序,它处理命令的> temp.txt部分,结果是在您的主机上创建了该文件。

票数 1
EN

Stack Overflow用户

发布于 2018-06-22 19:04:40

使用它来获取docker容器的终端&为Host打开一个单独的窗口。但我就是这么做的。

docker exec -it 5bf6d45b4f79 /bin/bash

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50985917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档