2017-03-17 41 views
0

我有一个关于Docker中整个数据量过程的问题。基本上,这里有两个Dockerfiles及其各自的运行命令:如何在容器中将容器从容器安装到主机?

Dockerfile 1 -

# Transmission over Debian 
# 
# Version 2.92 

FROM debian:testing 

RUN apt-get update \ 
    && apt-get -y install nano \ 
    && apt-get -y install transmission-daemon transmission-common transmission-cli \ 
    && mkdir -p /transmission/config /transmission/watch /transmission/download 

ENTRYPOINT ["transmission-daemon", "--foreground"] 
CMD ["--config-dir", "/transmission/config", "--watch-dir", "/transmission/watch", "--download-dir", "/transmission/download", "--allowed", "*", "--no-blocklist", "--no-auth", "--no-dht", "--no-lpd", "--encryption-preferred"] 

命令1 -

docker run --name transmission -d -p 9091:9091 -v C:\path\to\config:/transmission/config -v C:\path\to\watch:/transmission/watch -v C:\path\to\download:/transmission/download transmission 

Dockerfile 2 -

# Nginx over Debian 
# 
# Version 1.10.3 

FROM debian:testing 

RUN apt-get update \ 
    && apt-get -y install nano \ 
    && apt-get -y install nginx 

EXPOSE 80 443 

CMD ["nginx", "-g", "daemon off;"] 

命令2 -

docker run --name nginx -d -p 80:80 -v C:\path\to\config:/etc/nginx -v C:\path\to\html:/var/www/html nginx 

于是,奇怪的是,第一dockerfile和指挥的作品如预期。 docker守护程序将容器中的目录挂载到主机。所以,我可以根据需要编辑配置文件,并在重启时将它们保存到容器中。

但是,至于第二个dockerfile和命令它似乎并没有工作。我知道如果你去了Docker卷的文档,它说卷的安装只能用于从主机到容器的单向传输,但是传输容器如何按预期工作,而Nginx容器不是这样?

,P:的S - 我运行的Microsoft Windows 10临建14393作为我的主机和版本17.03.0-CE-WIN1(10300)频道:公测我的泊坞版本。

编辑 - 只是为了澄清。我试图从Nginx容器内的文件获取文件到主机。第一个容器(传输)通过使用数据量在这方面起作用。但是,对于第二个容器(Nginx),它不希望将容器内安装的目录中的文件复制到主机。其他一切都在工作,但它确实成功开始。

+0

什么“不起作用”?容器无法启动?本地文件是否出现在已安装的目录中,但未更新?挂载的目录中是否有任何内容? – Matt

+0

@Matt我试图从Nginx容器内获取文件到主机。第一个容器(传输)通过使用数据量在这方面起作用。但是,对于第二个容器(Nginx),它不希望将容器内安装的目录中的文件复制到主机。其他一切都在工作,但它确实成功开始。 – Cat

+0

请使用这些信息更新您的问题。 –

回答

2

Host volumes不要从容器>主机复制数据。主机卷安装在容器/映像中的顶部,因此它们可以有效地替换容器中的内容与主机上的内容。

A standard or "named" volume将现有数据从容器映像复制到新卷中。这些卷被推出容器与VOLUME命令在它的Dockerfile或泊坞窗命令创建

docker run -v myvolume:/var/whatever myimage 

默认情况下,这是存储在一个“局部”量数据,“本地”作为泊坞主机上。你的情况是在运行Docker的虚拟机上而不是你的Windows主机上,因此你可能无法轻松访问它。

你可能会错误的传输自动生成文件在一个空白目录中的副本?

如果你真的需要保留VM主机>容器映射,那么你可能需要将数据手动复制:

docker create --name nginxcopy nginx 
docker cp nginxcopy:/etc/nginx C:\path\to\config 
docker cp nginxcopy:/var/www/html C:\path\to\html 
docker rm nginxcopy 

然后你就可以将填充主目录映射到容器中,他们将有图像附带的默认数据。

+0

你能解释一下标准卷吗?你是什​​么意思,“将容器映像中的现有数据复制到新卷中?” – Cat

+0

我已经扩展了该部分。基本上,当docker为Dockerfile'VOLUME'或'docker run -v volume:/ wherever'创建新卷时,它将使用容器映像('/ wherever')中目标装入点中已存在的任何内容填充卷。这是您寻找的行为,但您无法在主机上指定位置,并且它未映射到Windows。 – Matt

+0

好的,这样做更有意义,但我仍然对一件事感到困惑。传输容器如何将文件复制到主机上的目录中,但Nginx容器没有? – Cat

相关问题