编辑+ 2 =只是fyi,我是root用户,这意味着我每次只授权cmd时都没有输出超级用户(sudo)。
好的,所以在对Docker进行大约24小时的研究后,如果我直截了当地了解我,我会有点不高兴。
作为一个快速回顾,docker可以作为一种方法,为特定的Web服务,运行环境,虚拟机编写代码或配置文件更改,所有这些都来自linux终端/文本文件的舒适范围。毫无疑问,这是一个惊人的功能:在一台计算机上制作的代码或构建工作在无限数量的其他机器上真正是一个突破。虽然我很恼火,关于什么是容器和什么是图像的术语是错误的(图像是由docker服务器制作的代码层的保存点,或者可以从需要基本图像的容器创建.Dockerfiles通过运行所有所需的图层并将其滚动到一个图像中,可以自动化制作图像的构建过程,以便轻松访问它。)。
看看与docker的关联是“确定它可以部署在各种不同的操作系统上并使用它们各自的命令”。但是这些命令并没有真正传递出类似于当地环境的说法。在使用centos的dockerbuild上运行一些测试时,基本命令结构为
FROM centos
RUN yum search epel
RUN yum install -y epel-release.noarch
RUN echo epel installed!
所以这在docker build中工作,并说它成功安装了它。 通过运行apt-cache而不是yum,ubuntu也可以这么说。但是回到centos VM,它并没有声明已经安装了epel,因为在尝试运行命令时
yum remove epel-release.noarch
它说“没有包除去,但有一个名为......的包”。那么,如果docker能够成为多平台,为什么它不能在我们定位的本地平台/图像上实际创建这些更改呢? docker build会对该特定环境中发生的事情进行模拟,但我似乎无法使其成为现实。如果它不能改变系统本地使用的任何东西,除非我遗漏了某些东西,否则这只会破坏我对Docker的预期目的之一。
如果有人能解决这个困境,请告诉我。
编辑+ 1 =好的,所以我昨天想出了我想要做的是查看和修改容器,这可以通过执行docker logs containerID
或docker run -t -i img /bin/sh
来完成,这将使我进入交互式shell在那里进行容器更改。不过,我想知道是否有一种方法可以让docker在容器内与本地环境进行通信。
答案 0 :(得分:3)
所以,我认为你可能在很大程度上错过了Docker背后的观点,Docker是故意与当地环境隔离的容器管理。我们的想法是创建可以在任何Docker主机上运行的容器化应用程序,而无需担心安装的特定操作系统或主机配置。
也就是说,如果这真的是你想做的事,有很多方法可以打破这种孤立。
如果您希望能够修改主机网络配置(包括接口地址,路由表,iptables规则等),则可以使用--net=host
(可能是--privileged
)启动容器。< / p>
您可以使用-v
命令行选项将主机文件系统的一部分(或全部)作为容器内的卷。例如,docker run -v /:/host ...
会将主机文件系统的根公开为容器内的/host
。
通常,Docker容器有自己的PID命名空间,这意味着主机上的进程在容器内不可见。您可以使用--pid=host
在主机PID命名空间中运行容器。
您可以结合使用这些不同的选项,以便在完成特定任务时提供对主机的访问权限。
如果您要尝试做的只是在主机上安装软件包,则容器可能是该作业的错误工具。