容器"共享"宿主机的hosts文件(真 . 可行方案)

·  阅读 1763

之前搞容器,需要将宿主机的hosts文件共享给容器,网上搜到这篇文章:www.cnblogs.com/runnerjack/… 看起来对我的用处不是很大,因为我需要用api创建并启动容器。

搞定只需两步:

  1. 将/etc 挂载到容器的某个目录,例如:/root/container/ (容器无此目录可以在Dockerfile中创建)
  2. 启动容器的脚本中加一下行,目的是将宿主机的hosts复制一份到容器的hosts(过滤掉含有127.0.0.1的行)
grep -v "127.0.0.1" /root/docker-hive/hosts >> /etc/hosts
复制代码

我的Dockerfile

FROM centos:8

ARG app_name=docker-hive
ENV TERM linux
COPY docker-hive.jar /usr/docker-hive.jar
COPY start.sh /usr/start.sh
RUN mkdir -p /root/${app_name}
RUN chmod +x /usr/start.sh
ENTRYPOINT ["/bin/bash","/usr/start.sh"]
CMD ["1"]
复制代码

start.sh 内容是

#!/bin/bash
source /etc/profile
export HADOOP_CONF_DIR=/etc/hadoop
grep -v "127.0.0.1" /root/docker-hive/hosts >> /etc/hosts
java -jar /usr/docker-hive/docker-hive.jar $1 $2
复制代码

启动命令

docker run -it -v /data:/data -v /etc:/etc:ro -v /etc:/root/docker-hive:ro  -v /tmp:/tmp --name hive-test docker-hive:1.0 /data/12345.txt /data/log/12345.log
复制代码

以上的启动命令可以用docker的java-api创建。

题外扩展:

1.想共享宿主机的hosts文件的同等方式,创建容器的时候指定网络模式为host模式。 2.目前主流的解决访问主机问题都是通过配置DNS方式,即配置文件:/etc/resolv.conf

分类:
后端
标签:
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改