如何轻松访问容器内外的数据?

时间:2017-07-04 08:48:18

标签: docker

我有一个Docker容器,里面设置了MinGW编译器。我想用它来开发。那就是我想编译,测试,编辑,编译,测试......

容器也将在CI管道中使用,并最终用于生成生产版本。通过使用相同的容器,我们确保构建环境的一致性。

我的主机拥有用于代码编辑等的开发工具,而容器有编译器,所以很明显需要共享文件。

我已经设置了一个卷。很遗憾,我无法使用我的用户帐户访问它:

// GET: Information/Delete/5
    public ActionResult Delete(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Information information = db.Informations.Find(id);
        if (information == null)
        {
            return HttpNotFound();
        }
        return View(information);
    }

    // POST: Information/Delete/5
    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        Information information = db.Informations.Find(id);
        db.Informations.Remove(information);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }
}

我的用户在群组泊坞窗中,但群组泊坞窗没有对/ var / lib / docker的读取权限,因此无法访问卷的_data目录。

我尝试过欺骗并使用sudo调整文件夹权限,以便组docker在路径中一直具有读取权限,但这些权限会在重新启动时重写 - 毫无疑问,当docker服务器启动时。

有人可以找到解决方法吗?我尝试过使用符号链接,但它们总是继承路径元素的最严格权限。

2 个答案:

答案 0 :(得分:1)

当我最初阅读文档时,看起来只能使用命名卷,但我刚刚发现目录也可以用作源代码。 E.g:

mkdir /home/alastair/mingw_build
docker run -v /home/alastair/mingw_build:/home/mingw_build/build mingw_build

由于我想使用相同的容器并运行CI测试的脚本和本地开发,我在.bashrc中设置了一个环境变量,并在我的运行脚本中测试它。如果它存在,我使用它指向的目录,如果不存在,我使用命名容器,必要时创建它。

答案 1 :(得分:0)

Docker包含一个基于用户名称空间的用户/组重新映射功能 - 默认情况下未启用。

按照以下说明在docker守护程序上启用“userne-remap”:https://docs.docker.com/engine/security/userns-remap/