我想我不明白docker中mounts/volumes的用途。在(debian)主机上,我是:
mkdir testdir
touch testdir/testfile
nano Dockerfile
字符串
并补充说:
FROM debian:11
RUN --mount=type=bind,source=./testdir,target=/testdir
RUN ls /testdir
型
然后运行docker build .
我希望ls
命令能打印出testfile
。但是看起来好像什么都没有挂载?(注意mount命令运行得很好)。
--------------------
1 | FROM debian:11
2 | RUN --mount=type=bind,source=./testdir,target=/testdir
3 | >>> RUN ls /testdir
--------------------
ERROR: failed to solve: process "/bin/sh -c ls /testdir" did not complete successfully: exit code: 2
型
如果target
甚至不创建指向其目标的目录,那么它的意义何在?
(运行docker 24.0.5和buildx 0.11.2)
1条答案
按热度按时间uqcuzwp81#
我想,你忽略了一个重要的细节:你在一个单独的
RUN
指令中运行ls /testdir
。我不确定,但我猜这只可能在--mount=type=cache
中运行。您使用的是
bind
,因此您的挂载仅在相同的RUN
内存中保持。试试这样的东西:
字符串
编辑:
我刚刚测试了这两个版本,它们在我的机器上都运行得很好。
问题肯定出在docker本身或者你正在使用的其他工具上,比如buildkit或者buildx