在 docker 的共享卷中创建符号并在主机中访问它
Creating a symbolic in shared volume of docker and accessing it in host machine
我正在 docker 内的主机挂载卷中创建符号 link。但是我无法在主机中访问它。有没有可能做到。如果是,我该怎么做。
我使用了以下命令挂载目录
docker run -it --rm --net host -v $(pwd):/workspace --name myproject my-container:dev
然后我使用
创建了一个符号link
import os
fname = '/workspace/log/project_info_hostinfo_timeinfo_exe_param.log'
symlink_name = '/workspace/log/project_info.log'
os.symlink(fname, symlink_name)
现在,当我尝试查看日志信息时,它看起来像
$ls
lrwxrwxrwx 1 root root 66 Mar 4 14:54 project_info.log -> /workspace/log/project_info_hostinfo_timeinfo_exe_param.log
-rw-r--r-- 1 root root 206 Mar 4 14:54 project_info_hostinfo_timeinfo_exe_param.log
但是当我尝试打开文件时,我收到类似
的消息
$tail -f project_info.log
tail: cannot open 'project_info.log' for reading: No such file or directory
tail: no files remaining
您可以使用您想要的任何路径名创建符号 link。当您访问它时,它在其自己的上下文中用作普通文件系统路径;如果是相对路径,则相对于 link 的位置进行访问。如果您在多个上下文中有相同的文件系统(主机和容器中的绑定挂载 Docker 目录;远程文件系统),则 symlink 可能会在一个上下文中正确解析,但不会正确解析其他.
在你的例子中:
- symlink指向绝对路径
/workspace/log/project_info_hostinfo_timeinfo_exe_param.log
- 容器内部,
/workspace
目录是挂载的host目录,所以可以
- 容器外没有
/workspace
目录,所以不行
同样在您的示例中,link 及其目标位于同一目录中。这意味着如果 link 目标只是一个文件名,它将在与 link 相同的目录中查找。这样就避免了绝对路径不同的问题。
import os
# If the link target is in the same directory, just use a filename,
# not an absolute path
fname = 'project_info_hostinfo_timeinfo_exe_param.log'
symlink_name = '/workspace/log/project_info.log'
os.symlink(fname, symlink_name)
创建一个 symlink 作为相对路径通常有助于避免重定位目录树的问题; ln -s ../assets/index.html .
,例如,即使它在容器上下文中,或者您的同事在他们的工作站上有不同的目录结构,它仍然会指向同一个地方。
我正在 docker 内的主机挂载卷中创建符号 link。但是我无法在主机中访问它。有没有可能做到。如果是,我该怎么做。
我使用了以下命令挂载目录
docker run -it --rm --net host -v $(pwd):/workspace --name myproject my-container:dev
然后我使用
创建了一个符号linkimport os
fname = '/workspace/log/project_info_hostinfo_timeinfo_exe_param.log'
symlink_name = '/workspace/log/project_info.log'
os.symlink(fname, symlink_name)
现在,当我尝试查看日志信息时,它看起来像
$ls
lrwxrwxrwx 1 root root 66 Mar 4 14:54 project_info.log -> /workspace/log/project_info_hostinfo_timeinfo_exe_param.log
-rw-r--r-- 1 root root 206 Mar 4 14:54 project_info_hostinfo_timeinfo_exe_param.log
但是当我尝试打开文件时,我收到类似
的消息$tail -f project_info.log
tail: cannot open 'project_info.log' for reading: No such file or directory
tail: no files remaining
您可以使用您想要的任何路径名创建符号 link。当您访问它时,它在其自己的上下文中用作普通文件系统路径;如果是相对路径,则相对于 link 的位置进行访问。如果您在多个上下文中有相同的文件系统(主机和容器中的绑定挂载 Docker 目录;远程文件系统),则 symlink 可能会在一个上下文中正确解析,但不会正确解析其他.
在你的例子中:
- symlink指向绝对路径
/workspace/log/project_info_hostinfo_timeinfo_exe_param.log
- 容器内部,
/workspace
目录是挂载的host目录,所以可以 - 容器外没有
/workspace
目录,所以不行
同样在您的示例中,link 及其目标位于同一目录中。这意味着如果 link 目标只是一个文件名,它将在与 link 相同的目录中查找。这样就避免了绝对路径不同的问题。
import os
# If the link target is in the same directory, just use a filename,
# not an absolute path
fname = 'project_info_hostinfo_timeinfo_exe_param.log'
symlink_name = '/workspace/log/project_info.log'
os.symlink(fname, symlink_name)
创建一个 symlink 作为相对路径通常有助于避免重定位目录树的问题; ln -s ../assets/index.html .
,例如,即使它在容器上下文中,或者您的同事在他们的工作站上有不同的目录结构,它仍然会指向同一个地方。