我想/etc/hosts
在“ docker build”期间更新文件。
我在Dockerfile中添加了以下内容,但它既不更新/etc/hosts
文件也不给出任何错误。
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
我需要更新/etc/hosts
。有人可以建议吗?
我想/etc/hosts
在“ docker build”期间更新文件。
我在Dockerfile中添加了以下内容,但它既不更新/etc/hosts
文件也不给出任何错误。
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
我需要更新/etc/hosts
。有人可以建议吗?
Answers:
对于较新版本的docker,可以使用docker-compose及其指令来完成extra_hosts
添加主机名映射。
使用与docker run
client--add-host
参数相同的值(docker 1.8应已可用)。
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
简而言之:/etc/hosts
在运行容器时对其进行修改,而不是对其进行构建。
随着多克尔17.x +,你有docker build --add-host
提到以下,但是,作为评价问题34078在这个答案:
--add-host
构建过程中的功能旨在允许在构建过程中覆盖主机,但不能将该配置保留在映像中。
提到的解决方案确实参考了我在上面建议的docker-compose:
- 运行内部DNS;您可以设置要在守护程序中使用的默认DNS服务器;这样,每个启动的容器默认都会自动使用配置的DNS
- 使用docker compose并提供
docker-compose.yml
给您的开发人员。
docker compose文件允许您指定启动容器时应使用的所有选项,因此开发人员只需docker组合即可使用他们需要设置的所有选项来启动容器。
docket exec -it <container name> /bin/bash
,然后使用首选的命令行编辑器(vim,emacs,nano,echo''。>> />)在/ ect / host下更新Docker的容器主机。
您不能使用echo
in RUN
步来修改映像中的主机文件,因为从映像启动容器时,docker daemon会维护文件(/ etc / hosts)及其内容(主机条目)。
但是,可以使用以下方法来实现相同目的:
ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.254.10 database-server >> /etc/hosts && echo 192.168.239.62 redis-ms-server >> /etc/hosts && exec java -jar ./botblocker.jar " ]
这里要注意的关键是exec
docker文档所建议的命令的使用。使用exec将使java命令作为容器的PID 1。Docker中断只会对此做出响应。
请参阅https://docs.docker.com/engine/reference/builder/#entrypoint
ENTRYPOINT
不是图像指示。仅当我们从该映像运行容器时,它才标记入口点,这意味着主机入口仅在容器运行后才存在。我认为该要求不是必不可少的。一定会有一些误会。
我认为docker最近将--add-host
标志添加到docker build中,这确实很棒。
[编辑]因此,此功能已在17.04.0-ce中更新
有关如何docker build
与--add-host
标志一起使用的更多详细信息,请访问:https : //docs.docker.com/edge/engine/reference/commandline/build/
--add-host
功能在CentOS的Docker 12上可用。
如果这对任何人都有用,那么HOSTALIASES
env变量对我有用:
echo "fakehost realhost" > /etc/host.aliases
export HOSTALIASES=/etc/host.aliases
您可以在运行docker时使用以下命令进行操作
docker run [OPTIONS] --add-host example.com:127.0.0.1 <your-image-name>:<your tag>
在这里,我正在映射example.com
到localhost 127.0.0.1
及其工作。
我正在使用AWS Elasticbeanstalk + Docker + Supervisord。
只需在中添加一些代码即可Dockerfile
。
CMD echo 123.123.123.123 this_is_my.host >> /etc/hosts; supervisord -n;
hosts
想要添加到Docker容器的自己的文件;1.2.3.4 abc.tv
5.6.7.8 domain.xyz
1.3.5.7 odd.org
2.4.6.8 even.net
hosts
通过将以下行添加到容器中,将文件复制到容器中Dockerfile
COPY hosts /etc/hosts_extra
ENTRYPOINT
或CMD
或CRON
作业,则将以下命令行合并到其中,或者至少在正在运行的容器中运行它:cat /etc/hosts_extra >> etc/hosts;
Dockerfile
因为修改将丢失:RUN cat /etc/hosts_extra >> etc/hosts;
您可以在docker运行期间使用--add-host选项。
供您使用: docker run --add-host mynginx:192.168.33.11 [image_name]:[tag]
这将更新您的/ etc / hosts
您可以使用以下命令进行检查:
如果sh对您不起作用,则可以尝试bash或/ bin / sh或/ bin / bash
以下通过在docker run而不是docker build期间挂载文件为我工作
docker service create --name <name> --mount type=bind,source=/etc/hosts,dst=/etc/hosts <image>