繁体   English   中英

从 docker 容器中读取 docker 卷中的文件

[英]read file in docker volume from docker container

我在 github 上有一个 osrm 后端的 docker 映像。

当我启动容器时,会运行 profile.lua 脚本,它会触发 a.cpp 文件来读取文件 rastersource.asc 的内容。

该文件的路径在 lua 脚本中定义。

镜像中的 C++ 文件位于 scr/extractor/rastersource.cpp 中,profile.lua 和 rasterscource.asc 都在e:/docker docker 中,因此它们都应该在卷中。

我所做的是运行容器:

docker run -t -v e:/docker:/data osrm/osrm-backend osrm-extract -p /data/profile.lua /data/location-latest.osm.pbf

但是现在我很难定义 rastersource.cpp 应该从中读取文件的绝对路径。

.lua 代码:

raster_source = raster:load(
    os.getenv('file/path/which/is/unknown.asc'),
    4.86,    -- longitude min
    5.5,  -- longitude max
    51.95,    -- latitude min
    52.286,  -- latitude max
    169,    -- number of rows
    321     -- number of cols
),

.cpp 代码

int RasterContainer::LoadRasterSource(const std::string &path_string,
                                  double xmin,
                                  double xmax,
                                  double ymin,
                                  double ymax,
                                  std::size_t nrows,
                                  std::size_t ncols)
 { 
...
      boost::filesystem::path filepath(path_string);
      if (!boost::filesystem::exists(filepath))
      {
         throw util::RuntimeError(
         path_string, ErrorCode::FileOpenError, SOURCE_REF, "File not found");
      }
}

我得到的错误是:

terminate called after throwing an instance of 'sol::error'
what():  lua: error: Problem opening file:  (possible cause: "File not found") (at src/extractor/raster_source.cpp:112)

我发现了很多关于这个问题的问题,但我不明白任何答案。

我希望这里有人可以帮助我。 提前致谢。

如果您的文件位于主机上的e:/docker/rastersource.asc中,则它应该位于容器内的/data/rastersource.asc中。

如果您的容器有 bash (例如),那么执行以下操作可能会有所帮助

docker run -it -v e:/docker:/data osrm/osrm-backend osrm-extract bash

以交互方式运行您的容器,以便手动查看容器文件系统并可能以交互方式运行任何其他命令。

我正在使用 os.getenv()。 没有它一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM