当前位置: 首页 > 面试题库 >

在Ubuntu上运行docker:无法从容器写入已安装的主机卷

曹昊焱
2023-03-14
问题内容

Docker对我来说在Mac上运行良好,但是我必须在VirtualBox(或Parallels或VMWare
Fusion)中运行docker主机,因为Mac的内核不支持docker。

所以我尝试在Ubuntu桌面上设置应用程序和docker-compose-
本机地,其中docker客户端和docker主机都物理上运行在同一系统上。这可行,但是我正在运行的Docker容器无法写入已安装的主机卷。

我使用docker-compose进行以下设置:

volumes:
   - ./api:/usr/src/app

因此,我将主机Ubuntu OS的“ api”目录挂载到/ usr / src / app下的docker容器中。

docker inspect <container ID> 显示该卷可写

"Destination": "/usr/src/app",
"Mode": "rw",
"RW": true

但是事实并非如此:permission denied当我尝试在Docker容器中创建目录或编辑文件时得到提示。

我用谷歌搜索了这个问题,当然,我遇到了一些CentOS / RHEL的SELinux问题,但是 我运行的是Ubuntu 15.10(64位版本)
,而不是CentOS。


问题答案:

如果您uid在主机(id -u)上的主机名uid与docker容器中的用户名(通常为“ docker”)不同,则可能会出现此问题。你可以试试:

  1. 使您的用户与docker容器中的用户之间的UID相同。
  2. 将您和Docker都属于的组的目录上的组权限设置为可写。
  3. 您还可以使用nuclear选项:

chmod a+rwx -R project-dir/

核选项会使您的git工作区变得肮脏,这会极大地烦扰您,因此这不是最佳的长期解决方案。它可以止血。

为了进一步理解该问题,您可能会发现以下有用:

  1. https://github.com/docker/docker/issues/7906
  2. https://github.com/docker/docker/issues/7198


 类似资料:
  • 问题内容: 我已经能够成功使用以下卷在Docker容器之间共享文件夹 但是我的问题是,这与在Dockerfile中使用命令之间有什么区别 我正在使用带有命令的图像,并且想知道如何与主机共享它。我已经使用上面的命令完成了此操作,但我不知道是否同时需要和和。 问题答案: 该命令将在您的容器中安装一个目录,并将在该目录中创建或编辑的所有文件存储 在容器文件结构外部的 主机磁盘上,绕过联合文件系统。 这个

  • 问题内容: 如何从Docker容器控制主机? 例如,如何执行复制到主机的bash脚本? 问题答案: 那真的取决于您需要该bash脚本执行的操作! 例如,如果bash脚本仅回显某些输出,则可以执行 另一种可能性是您希望bash脚本安装某些软件-例如要安装docker-compose的脚本。你可以做类似的事情 但是,此时,您真的必须深入了解脚本在做什么,以允许容器从容器内部对其主机授予特定权限。

  • 如何从docker容器控制主机? 例如,如何执行复制到主机的bash脚本?

  • 我有一个Dockerfile: 当demo.php执行时,它会创建一个文件,我想将该文件复制到主机上的卷。是否可以使用这样的卷将文件从容器中恢复到主机上?

  • 如果我执行docker命令,如 我得到一个错误,docker没有安装,我可以做sudo apt get install docker来安装它。如果我这样做,它会说docker是最新版本。我是否需要设置二进制文件的某种路径才能运行它? 如果我做,没有答案。