docker构建问题--添加主机命令

ozxc1zmp  于 2023-03-17  发布在  Docker
关注(0)|答案(2)|浏览(160)

我是一个为开发人员提供Docker图像的基础设施管理员。
我创建了“A”图像,然后告诉Docker运行命令是

docker run --add-host=a-lic:10.0.0.1 --add-host=b-lic:10.0.0.2 A

每个开发人员要求我,请删除--add-host选项,因为它很长。所以我想编辑/etc/hosts文件时,docker构建如果可能的话。
我发现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

而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)

正确的是什么??

pnwntuvh

pnwntuvh1#

这是一种设计(见https://github.com/moby/moby/issues/34078#issuecomment-314798584://github.com/moby/moby/pull/30383#issuecomment-314797629);构建期间的--add-host特征被设计为允许在构建期间覆盖主机,但是 * 不 * 将该配置持久化在映像中。
如果它 * 会 * 持续在图像中;

  • 映像不可移植(即,只能在您的特定环境中工作)
  • 图像能够欺骗DNS(如果图像包含google.com 123.123.123.123会怎样?)
  • 运行 * 映像的人应该保持对重写主机的控制,而不是映像作者;它是一个运行时配置。

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

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

ru9i0ody2#

还有另一种方法可以在这里工作,如果有点难看的话。这是针对Windows的,你可以很容易地在Linux上做同样的事情。
docker run中传递环境变量,例如

docker run --env HOST_IP_ADDRESS=a-lic:10.0.0.1

然后在你的Dockerfile的末尾,你有一个批处理文件或脚本在CMD运行你的应用程序,例如

CMD [ "app-start.bat" ]

将以下行添加到app-start.bat

echo %HOST_IP_ADDRESS% >> c:\windows\system32\drivers\etc\hosts

如果需要,可以添加多个。

相关问题