刚刚开始使用docker。我已经创建了一个镜像,启动了一个容器,但当我写入容器中的文件时,它会出现在我的本地磁盘上。我很困惑为什么会这样,如果是这样的话,我怎么可能运行一个镜像的许多实例。
这就是我要做的
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然后
docker exec -it 5bf6d45b4f79 echo "hello" > temp.txt和
docker exec -it 5bf6d45b4f79 cat temp.txt
hello但是在我的本地磁盘上的Mac命令行中
cat temp.txt
hello在我的Mac命令行上紧跟着的是
echo "goodbye" >> temp.txt
cat temp.txt
hello
goodbye然后在容器中
docker exec -it 5bf6d45b4f79 cat temp.txt
hello
goodbye啊!怎么会这样?我认为docker容器写入了它们自己的文件系统。所以我完全迷惑了。
这也意味着我不能运行镜像的多个实例,因为它们都会写入相同的文件。
发布于 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保存在容器内,请尝试:
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中生成的
发布于 2018-06-22 18:49:44
docker exec -it 5bf6d45b4f79 echo "hello" > temp.txt让您的容器打印hello,然后> temp.txt获取此输出,并在主机上生成一个文件。
要让您的容器打印hello,然后在本身的中创建一个,您必须使用:
docker container exec -it <your_container_name> sh -c 'echo "hello" > temp.txt'解释:
sh -c在容器中创建一个新的外壳并运行echo "hello" > temp.txt'。这意味着> temp.txt部件将由该外壳程序处理,因此该文件将在容器中创建。
按照您尝试的方式,它是您的主机的外壳程序,它处理命令的> temp.txt部分,结果是在您的主机上创建了该文件。
发布于 2018-06-22 19:04:40
使用它来获取docker容器的终端&为Host打开一个单独的窗口。但我就是这么做的。
docker exec -it 5bf6d45b4f79 /bin/bash
https://stackoverflow.com/questions/50985917
复制相似问题