之前搞容器,需要将宿主机的hosts文件共享给容器,网上搜到这篇文章:www.cnblogs.com/runnerjack/… 看起来对我的用处不是很大,因为我需要用api创建并启动容器。
搞定只需两步:
- 将/etc 挂载到容器的某个目录,例如:/root/container/ (容器无此目录可以在Dockerfile中创建)
- 启动容器的脚本中加一下行,目的是将宿主机的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