Docker управляет файлом /etc/hosts
для вас. Вы не можете предоставить его в образе или привязать к нему. Это также верно для /etc/resolv.conf
и является частью того, как Docker обеспечивает сетевое окружение для контейнера.
Для того, что вы показываете, вам вообще не нужен /etc/hosts
. Если вы запускаете контейнеры в Docker Compose, автоматически обеспечивает разрешение DNS между контейнерами , поэтому имя хоста db
относится к контейнеру, объявленному как db:
в файле docker-compose.yml
. Это предоставляется из коробки; вам вообще ничего не нужно делать, чтобы эта функция работала.
Если вам нужно дать альтернативное имя контейнеру, вы можете объявить aliases:
для него в docker-compose.yml
файл. Хотя это было бы немного необычно.
Сильно полагаться на /etc/hosts
обычно не лучшая практика. Поддерживать синхронизацию файлов хостов c в разных средах сложно, и в вашем примере, когда вы скрываете имя хоста, которое уже существует, поведение может быть различным в разных программах (в зависимости от того, использует ли он системный преобразователь или только true DNS). Однако, если вам необходимо, вы можете указать extra_hosts:
в файле docker-compose.yml
, чтобы Docker настроил его для вас.