Python 在docker的共享卷中创建符号并在主机中访问它

Python 在docker的共享卷中创建符号并在主机中访问它,python,linux,docker,unix,symlink,Python,Linux,Docker,Unix,Symlink,我正在docker内主机的装入卷中创建一个符号链接。但我无法在主机中访问它。有可能吗。如果是,我怎么做 我使用以下命令装载目录 docker run -it --rm --net host -v $(pwd):/workspace --name myproject my-container:dev 然后,我使用 import os fname = '/workspace/log/project_info_hostinfo_timeinfo_exe_param.log' symlink_name

我正在docker内主机的装入卷中创建一个符号链接。但我无法在主机中访问它。有可能吗。如果是,我怎么做

我使用以下命令装载目录

docker run -it --rm --net host -v $(pwd):/workspace --name myproject my-container:dev
然后,我使用

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

可以使用所需的任何路径名创建符号链接。当您访问它时,它在自己的上下文中被用作一个正常的文件系统路径;如果它是相对路径,则相对于链接的位置访问它。如果在多个上下文中有相同的文件系统(主机和容器中都有绑定挂载的Docker目录;远程文件系统),则符号链接可能在一个上下文中正确解析,而在另一个上下文中则无法正确解析

在您的示例中:

  • 符号链接指向绝对路径
    /workspace/log/project\u info\u hostinfo\u timeinfo\u exe\u param.log
  • 在容器内部,
    /workspace
    目录是挂载的主机目录,因此它可以工作
  • 容器外部没有
    /workspace
    目录,因此它不工作
  • 同样在您的示例中,链接及其目标位于同一目录中。这意味着,如果链接目标只是一个文件名,它将在与链接相同的目录中查找。这避免了绝对路径不同的问题

    导入操作系统
    #如果链接目标在同一目录中,只需使用文件名,
    #不是绝对路径
    fname='project_info_hostinfo_timeinfo_exe_param.log'
    symlink_name='/workspace/log/project_info.log'
    os.symlink(fname,symlink\u name)
    

    创建一个符号链接作为相对路径通常很有帮助,以避免重新定位目录树的问题<例如,code>ln-s../assets/index.html。将仍然指向同一个位置,即使它位于容器上下文中,或者您的同事在其工作站上有不同的目录结构。

    谢谢您的回答。我想起来了,花了我
    3个小时