- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
该场景是通过 sock 绑定(bind)在 docker 内部/旁边的 docker,目的是为 C.I./C.D. 提供易于部署和可扩展的运行器代理。工具(在本例中为 VSTS)。之所以这样设置,是因为我要测试的各种项目使用docker/compose来运行测试,并配置一个C.I./C.D.与 docker/compose 兼容的 worker 多次变得麻烦且耗时。 (这最终将部署到 4+ Kubernetes 集群)
无论如何,问题:
docker 运行\
-它\
-v/var/run/docker.sock:/var/run/docker.sock\
nullvoxpopuli/vsts-agent-with-aws-ecr:最新的\
/斌/庆典
echo 'test' > 测试文件.txt
docker run -it -v file-test.txt:/file-test.txt busybox/bin/sh
光盘/
ls -la # 显示test-file.txt是一个目录
所以,
- 为什么文件被挂载为容器内的文件夹?
- 我需要做什么才能正确安装卷?
# On Host machine
docker run -it \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /tmp/vsts/work/:/tmp/vsts/work \
nullvoxpopuli/vsts-agent-with-aws-ecr:latest \
/bin/bash
# In vsts-agent-with-aws-ecr
cd /tmp/vsts/work/
git clone https://NullVoxPopuli@bitbucket.org/group/project.git
cd project/
./scripts/run/eslint.sh
# Success! (this uses docker-compose to map files to the node-based docker image)
最佳答案
Docker 从 docker 主机创建容器并挂载卷。任何时候卷安装中的文件或目录不存在时,它都会被初始化为一个空目录。因此,如果您从容器内部向 docker 套接字运行 docker 命令,这些命令将在 docker 主机上的容器外部进行解释,而文件不存在。此外,当您需要主机卷时,docker run
命令需要要挂载的卷的完整路径,否则它会被解释为命名卷。
此时您可能想要做的是:
docker volume rm file-test.txt
docker run -it -v $(pwd)/file-test.txt:/file-test.txt busybox /bin/sh
相反,如果您尝试将文件从容器内部包含到另一个容器,则可以使用这样的输入重定向来初始化命名卷:
tar -cC . . | docker run -i --rm -v file-test:/target busybox tar -xC /target
docker run -it -v file-test:/data busybox /bin/sh
它使用 tar 将当前目录的内容复制到 stdout,后者由交互式 docker 命令处理,然后将这些目录内容提取到容器内的/target 中,该容器是一个命名卷。请注意,在第二个示例中我没有将卷挂载到根目录中,因为命名卷是目录并且我不想替换根文件系统。
另一种选择是在 docker 主机上的多个容器之间共享一个卷挂载点,这样您在一个容器内编辑的文件就会到达主机,在那里它们被挂载到另一个容器中并在那里可见:
docker run \
-it \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /container-data:/container-data \
nullvoxpopuli/vsts-agent-with-aws-ecr:latest \
/bin/bash
echo 'test' > /container-data/test-file.txt
docker run -it -v /container-data:/container-data busybox /bin/sh
如果在容器运行时可能会修改这些文件,我不建议将这些文件装载到容器中。文件更改通常会导致 inode 发生变化,docker 会将旧的 inode 挂载到容器中。因此,容器内部或外部对文件所做的更改在另一侧可能看不到,并且如果您修改容器内部的文件,则删除容器时可能会丢失该更改。 inode问题的解决方案是将整个目录挂载到容器中。
关于linux - 为什么我挂载的 docker volume 文件会变成容器内的文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43685625/
我正在尝试创建1-click快捷方式,以便在上小学时玩一些90年代的旧游戏。 我正在尝试将ISO挂载到特定驱动器 运行程序 确保已卸载驱动器,以清除下一个要清除的游戏 我是脚本新手,所以我不确定从哪里
我正在运行 docker compose 命令以在 docker 中运行应用程序。但是,yml 中定义的卷是空的。如果我挂载一个文件,它就可以工作。但是,当我从 Windows 挂载目录时,我可以看到
我有一个双向滚动的无限滚动列表。该列表显示每行 5 个项目的网格,表示一周 7 天中的 5 个工作日。日子是按月剥离的斑马线(甚至月份的颜色略深)。我想将月份标题放在网格左侧的一列中,从该月的第一天或
我在按照 qemu/linaro 教程尝试执行 qemu, https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Vir
我正在尝试挂载 cephfs,密码没问题: mount -t ceph ceph-mon:6789:/docker/mnt/cephfs -o name=admin,secret=admin-pass
我可以将 HDFS 目录(在 Ubuntu 中配置)挂载到 Windows 服务器的驱动器吗? 映射后,例如 H:\--->\home\user1\HDFSCreatedDir ,想使用普通的 Jav
我有一个由 500 个 linux 机器组成的集群,现在需要使用带有绑定(bind)选项的挂载资源(参见 man 8 mount)来支持 chroot jail 。安装点需要在引导后强制执行和维护。我
我在一些代码片段和 Requests documentation 中看到过类似的事情。 : import requests sess = requests.Session() adapter = re
嗨,我正在编写一个安装cgroup的应用程序,如下所示 mount("cgroup", "/sys/fs/cgroup", "tmpfs",0,NULL); 我可以执行此操作,但是我想添加一个检查以了
我希望使用 Powershell 获取 VHD 安装的驱动器号。我可以使用以下 cmdlet 挂载 VHD: Mount-VHD -Path d:/tmp.vhdx 安装工作正常,但是当我尝试获取驱动
我正在编写一个脚本来创建坐骑。我使用的系统命令是: sudo /bin/mount -soft -t smbfs -o username='{username}',password='{passwor
我正在尝试在多个用户之间共享 NFS 安装。我无法让它工作,因为我总是被拒绝访问。我可以挂载共享,但看不到文件。 导出是通过Heartbeat+Pacemaker进行的。我认为这没有什么区别,但这是导
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 此问题似乎与 a specific programming problem, a sof
我最近全新安装了elementary OS,与Windows 8.1双启动。安装完成后,我编辑了eOS的fstab文件,使其自动在/mnt/Windows地址挂载一个ntfs分区。后来我关闭了笔记本电
我正在尝试在装有 Android 2.1 的模拟器上分析 Android 恶意软件。我想在执行可疑应用程序后分析文件权限和指纹。我知道,我可以使用 adb shell 来获取此信息,但我认为在执行例如
在使用 Webpack 和 Vue 编译项目后,当我打开一个使用 Vue 组件的页面时,我得到: [Vue warn]: Failed to mount component: template or
我正在使用 Linux Inotify 来检测程序上的 FS 事件。 当设备挂载到监控目录时如何通知我? 最佳答案 我不认为你可以用 inotify 来做到这一点。这是方法: 阅读uevents fr
有几篇文章对理解 Docker 的卷和数据管理非常有帮助。这两个尤其出色: http://container-solutions.com/understanding-volumes-docker/ h
我正在使用 mount -o bind /some/directory/here /foo/bar 我想用 bash 脚本检查 /foo/bar,看看它是否已经挂载?如果不是,则调用上面的 mount
我是一名优秀的程序员,十分优秀!