我已经进行了一些搜索,看起来docker容器内不支持symlink,是否有解决方法?我还使用了一个挂载到我的主目录(在主机上)的卷,这是持久的。
当我加载容器时,主目录中的现有符号链接不起作用。我什至尝试在容器内创建符号链接,这也不起作用。
编辑:我正在玩> 1卷,可能已经发现了一些东西。如果我安装了一个反映符号链接路径的卷,那么它似乎可以工作。例如,如果我有一个数据文件夹在容器内的/ work目录上符号链接到/ media / disk1(并且/ work映射到主机上的/ home),则可以挂载另一个将/ media / disk1附加到的卷。 / work / data,(并且/ media / disk1是主机上的/ home / data的符号链接),然后symlink在容器内起作用!
答案 0 :(得分:1)
如果有人遇到这个问题,我会回答我自己的问题。
首先,我们创建音量
docker volume create --name work type=none --opt device=/home/username --opt o=bind
然后,我们运行容器
docker container run -it --rm --mount source=work,target=/work
这样,我的主机主目录(/ home / username)就会映射到容器中的/ work目录。
现在,在我的主目录中,有一个符号链接数据-> / media / disk1 / data在容器内部不起作用。
但是,如果我设置另一个卷并进行安装,以使路径与符号链接匹配,即
docker volume create --name data type=none --opt device=/media/disk1/data --opt o=bind
docker container run -it --rm --mount source=work,target=/work --mount source=data,target=/work/data
然后,符号链接起作用。
我认为问题在于符号链接引用了容器“不知道”的路径,只有通过将该路径作为附加卷安装在正确的位置,符号链接才能起作用。
答案 1 :(得分:1)
符号链接需要相对于您的容器创建,而不是您的本地机器。使用以下命令访问容器中的命令行:
docker exec -it name_of_your_php_container bash
您的符号链接应类似于:
storage -> /var/www/html/storage/app/public
它不应该与您的本地机器相关,即
storage -> /Users/name/Sites/my-project/storage/app/public