OSX Docker Desktop文件共享的其他主机和容器无法通过docker-compose与/ etc / hosts一起使用

问题描述 投票:0回答:1
  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上工作正常

寻求帮助!

macos docker docker-compose hosts
1个回答
0
投票

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为您设置它。

© www.soinside.com 2019 - 2024. All rights reserved.