Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的docker容器中的/etc/hosts文件是空的?_Docker - Fatal编程技术网

为什么我的docker容器中的/etc/hosts文件是空的?

为什么我的docker容器中的/etc/hosts文件是空的?,docker,Docker,我创建了一个最小的docker容器,其中包含一个Haskell应用程序。运行时,应用程序工作正常,但它无法从/etc/hosts解析主机,因为它是空的,这意味着链接无法正常工作,或者至少我需要使用数字地址,这是不切实际的 我可以看到容器配置中HostsPath指向的文件已正确填充,但似乎在容器启动时会被覆盖 docker版本在Mac OS X Yosemite上是1.6.2 容器分几个阶段构建。第一阶段构建一个带有特殊填充文件系统的容器: FROM ubuntu:trusty MAINTAI

我创建了一个最小的docker容器,其中包含一个Haskell应用程序。运行时,应用程序工作正常,但它无法从/etc/hosts解析主机,因为它是空的,这意味着链接无法正常工作,或者至少我需要使用数字地址,这是不切实际的

我可以看到容器配置中HostsPath指向的文件已正确填充,但似乎在容器启动时会被覆盖

docker版本在Mac OS X Yosemite上是1.6.2

容器分几个阶段构建。第一阶段构建一个带有特殊填充文件系统的容器:

FROM ubuntu:trusty  
MAINTAINER arnaud@capital-match.com

RUN apt-get install -qqy libgmp-dev netbase

ADD . /

RUN chmod +x /create_rootfs.sh
RUN /create_rootfs.sh 
create_rootfs.sh文件包含以下内容:

 #!/bin/sh

 ROOTFS=/rootfs

 echo "Creating directories"

 mkdir -p /rootfs/bin
 mkdir -p /rootfs/lib
 mkdir /rootfs/lib/x86_64-linux-gnu
 mkdir /rootfs/lib64
 mkdir -p /rootfs/usr/lib/x86_64-linux-gnu/gconv
 # mkdir -p /rootfs/etc

 echo "Copying library files"

 cp -L /bin/sh /rootfs/bin/
 #cp -L /etc/protocols /rootfs/etc
 #cp -L /etc/services /rootfs/etc
 cp -L /lib/x86_64-linux-gnu/libc.so.6 /rootfs/lib/x86_64-linux-gnu/
 cp -L /lib/x86_64-linux-gnu/libdl.so.2 /rootfs/lib/x86_64-linux-gnu/
 cp -L /lib/x86_64-linux-gnu/libm.so.6 /rootfs/lib/x86_64-linux-gnu/
 cp -L /lib/x86_64-linux-gnu/libpthread.so.0 /rootfs/lib/x86_64-linux-gnu/
 cp -L /lib/x86_64-linux-gnu/libutil.so.1 /rootfs/lib/x86_64-linux-gnu/
 cp -L /lib/x86_64-linux-gnu/librt.so.1 /rootfs/lib/x86_64-linux-gnu/
 cp -L /lib/x86_64-linux-gnu/libz.so.1 /rootfs/lib/x86_64-linux-gnu/
 cp -L /lib/x86_64-linux-gnu/libnss_files.so.2 /rootfs/lib/x86_64-linux-gnu/
 cp -L /lib/x86_64-linux-gnu/libnss_dns.so.2 /rootfs/lib/x86_64-linux-gnu/
 cp -L /lib/x86_64-linux-gnu/libresolv.so.2 /rootfs/lib/x86_64-linux-gnu/
 cp -L /lib64/ld-linux-x86-64.so.2 /rootfs/lib64/
 cp -L /usr/lib/x86_64-linux-gnu/gconv/UTF-16.so /rootfs/usr/lib/x86_64-linux-gnu/gconv/
 cp -L /usr/lib/x86_64-linux-gnu/gconv/UTF-32.so /rootfs/usr/lib/x86_64-linux-gnu/gconv/
 cp -L /usr/lib/x86_64-linux-gnu/gconv/UTF-7.so /rootfs/usr/lib/x86_64-linux-gnu/gconv/
 cp -L /usr/lib/x86_64-linux-gnu/gconv/gconv-modules /rootfs/usr/lib/x86_64-linux-gnu/gconv/
 cp -L /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache /rootfs/usr/lib/x86_64-linux-gnu/gconv/
 cp -L /usr/lib/x86_64-linux-gnu/libgmp.so.10 /rootfs/usr/lib/x86_64-linux-gnu/
然后我导出这个文件系统的内容,构建一个

docker run capitalmatch/tinybuilder tar-cC/rootfs.|docker导入-capitalmatch/tiny

最后一个容器是从tiny构建的,添加了一些.tar.gz文件。然后将其作为以下程序运行:

docker run --link stunnel:monitor capitalmatch/app
stunnel容器的运行方式如下:

docker run --name=stunnel -p 5555:5555 -v $(pwd)/stunnel:/etc/stunnel capitalmatch/stunnel
我希望/etc/hosts包含一个monitor条目,在挂载之前确实如此。当我运行另一个以更经典的方式构建的容器时,例如基于ubuntu:trusty,我发现/etc/hosts`文件填充正确,一切正常,因此我怀疑是容器的构建方式造成了阻碍。

/etc/hosts每次都会根据您运行容器的方式重新生成

此外,如果您在Dockerfile中将某些内容放入此文件中。。。这将持续到所有层的构建过程结束,但在容器启动时将被清除

编辑网络配置文件

从Docker v.1.2.0开始,现在可以在运行的容器中编辑/etc/hosts、/etc/hostname和/etc/resolve.conf。如果您需要安装bind或其他可能覆盖其中一个文件的服务,这将非常有用

但是请注意,docker commit不会保存对这些文件的更改,docker运行期间也不会保存这些更改。这意味着它们不会保存在映像中,也不会在容器重新启动时持续存在;它们只会粘在流动的容器中

资料来源:

如果容器中的/etc/hosts文件不包含预期的条目,这意味着您可能没有正确初始化容器

请提供您实际如何运行容器的信息,或者为简化起见,刚准备好的docker-compose.yml文件。

/etc/hosts会根据您运行容器的方式每次重新生成

此外,如果您在Dockerfile中将某些内容放入此文件中。。。这将持续到所有层的构建过程结束,但在容器启动时将被清除

编辑网络配置文件

从Docker v.1.2.0开始,现在可以在运行的容器中编辑/etc/hosts、/etc/hostname和/etc/resolve.conf。如果您需要安装bind或其他可能覆盖其中一个文件的服务,这将非常有用

但是请注意,docker commit不会保存对这些文件的更改,docker运行期间也不会保存这些更改。这意味着它们不会保存在映像中,也不会在容器重新启动时持续存在;它们只会粘在流动的容器中

资料来源:

如果容器中的/etc/hosts文件不包含预期的条目,这意味着您可能没有正确初始化容器


请提供您实际如何运行容器的信息,或者为简化起见,请准备docker-compose.yml文件。

我没有答案,但我有一个解决方法:使用

 FROM busybox
 ...

一切正常。

我没有答案,但我有一个解决办法:使用

 FROM busybox
 ...

一切正常。

谢谢你的回答。我编辑了我的问题以添加更多信息。我知道我一定在容器中做了一些意想不到的事情,但不知道为什么,因为除了那些空文件,它工作得很好。谢谢你的回答。我编辑了我的问题以添加更多信息。我知道我一定是在容器中做了一些意想不到的事情,但不知道为什么,因为除了那些空文件,它工作得很好。容器特技的第一次运行调用看起来怎么样?docker run-名称stunnel…完成。虽然我不知道这和我的问题有什么关系,但container stunnel的第一次运行调用到底是什么样子?docker run-名称stunnel…完成。虽然我不知道这和我的问题有什么关系。