docker build --add-host 命令的问题

hok*_*ang 5 docker

我是为开发人员提供 docker 图像的基础设施管理员。

我创建了“A”图像,然后告诉 docker run 命令是

docker run --add-host=a-lic:10.0.0.1 --add-host=b-lic:10.0.0.2 A
Run Code Online (Sandbox Code Playgroud)

每个开发人员向我提出的要求,请删除 --add-host 选项,因为它很长。所以如果可能的话,我想在 docker build 时编辑 /etc/hosts 文件。

我发现了docker build --add-host从 17.04 新创建的选项,但它没有按我的预期工作。

有人说 --add-host 选项仅用于构建映像期间,而另一个说 --add-host 选项将如下工作(我的想法)。

docker build --add-host=a-lic:10.0.0.1 -t A .
docker run -it A
Run Code Online (Sandbox Code Playgroud)

而 docker 的文档对此是不够的。

$ docker build --help
Usage:  docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile

Options:
      --add-host list           Add a custom host-to-IP mapping (host:ip)
Run Code Online (Sandbox Code Playgroud)

什么是正确的??

tha*_*tah 5

这是设计使然(参见https://github.com/moby/moby/issues/34078#issuecomment-314798584 / https://github.com/moby/moby/pull/30383#issuecomment-314797629);--add-host构建期间的功能旨在允许在构建期间覆盖主机,但不会将该配置保留在映像中。

如果它会持续存在于图像中;

  • 图像不可移植(即,只能在您的特定环境中工作)
  • 图像将能够欺骗 DNS(如果包含图像google.com 123.123.123.123怎么办?)

运行图像的人应该保持对覆盖主机的控制权,而不是图像作者;这是一个运行时配置。

针对您的情况可能的解决方案;

  • 运行内部 DNS;您可以设置要在守护程序中使用的默认 DNS 服务器;这样每个容器启动都会默认自动使用配置的 DNS
  • 使用 docker compose 并为docker-compose.yml您的开发人员提供一个。docker compose 文件允许您指定启动容器时应使用的所有选项,因此开发人员可以docker compose up使用他们需要设置的所有选项启动容器。