service:
volumes:
- ~/.gitconfig:/root/.gitconfig
- ~/.pgpass:/root/.pgpass
- $SSH_AUTH_SOCK:/ssh-agent
- /etc/hosts:/etc/hosts
environment:
- SSH_AUTH_SOCK=/ssh-agent
在运行时,我尝试修改容器内部的/ etc / hosts
#!/bin/sh
alias_host_name="db"
container_ip=$(hostname -I|awk -F\ '{ print $(NF) }')
echo "Set route: $alias_host_name -> $container_ip"
grep -q $alias_host_name /etc/hosts
hosts_have_alias=$(echo $?)
if [ $hosts_have_alias -ne 0 ]; then
# no data for alias_host_name
echo "$container_ip $alias_host_name" >> /etc/hosts
else
# data for alias_host_name already exists
cp /etc/hosts ~/hosts.new
reg_exp_ip="((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])"
sed -ri "s/$reg_exp_ip \t$alias_host_name/$container_ip $alias_host_name/" ~/hosts.new
sed -ri "s/$reg_exp_ip $alias_host_name/$container_ip $alias_host_name/" ~/hosts.new
cat ~/hosts.new > /etc/hosts
fi
所以我希望/ etc / hosts将有新行
在Linux上工作正常
寻求帮助!
Docker为您管理/etc/hosts
文件。您不能在图像中提供它或将其绑定安装。 /etc/resolv.conf
也是如此,这也是Docker如何为容器提供网络环境的一部分。
对于您显示的内容,您根本不需要/etc/hosts
。如果您正在Docker Compose中运行容器,请使用it automatically provides DNS resolution between containers,因此主机名db
指代在db:
文件中声明为docker-compose.yml
的容器。它是开箱即用的;您完全不需要执行任何操作即可使用此功能。
如果需要给容器指定别名,则可以在aliases:
文件中为其声明aliases:
。但是,需要这个有点不寻常。
[严重依赖docker-compose.yml
通常不是最佳实践。要使主机文件在多个环境中保持同步是困难的,并且在您的示例中,您已经隐藏了已经存在的主机名,在不同程序中,其行为可能有所不同(取决于它是使用系统解析器还是仅使用真正的DNS)。不过,如果需要,您可以在/etc/hosts
文件中指定extra_hosts:
,让Docker为您设置它。