当前位置: 首页 > 面试题库 >

如何在Dockerfile中处理特定的主机名,如-h选项

子车飞鹏
2023-03-14
问题内容

我将CentOS 7用作docker daemon主机和centos:6 Docker映像。

我想安装一些需要可解析主机名作为非环回地址的软件。如果我使用-h选项运行docker映像,例如

docker run -i -t -h myhost centos:6 /bin/bash

然后,我可以安装软件,因为容器中的/ etc / hosts像

[root@myhost /]# cat /etc/hosts
172.17.0.7  myhost
127.0.0.1   localhost

[root@myhost /]# ping myhost
PING myhost (172.17.0.7) 56(84) bytes of data.
64 bytes from myhost (172.17.0.7): icmp_seq=1 ttl=64 time=0.033 ms

但是,如果我从Dockerfile创建映像,则无法使用相同的方式。我测试了使用以下Dockerfile创建映像

FROM centos:6

ENV HOSTNAME myhost
RUN ping myhost

在docker构建过程中,无法将分配的主机名解析为动态ip addr,如下所示:

$ docker build -t testimage .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM centos:6
 ---> a30bc9f3097e
Step 1 : ENV HOSTNAME myhost
 ---> Using cache
 ---> e73bf592389e
Step 2 : RUN ping myhost
 ---> Running in ca54c8eac073
ping: unknown host myhost
INFO[0000] The command [/bin/sh -c ping myhost] returned a non-zero code: 2

如何使用某些解析为动态容器IP地址的特定主机名?


问题答案:

这在Dockerfile中通常是不可能的。

根据软件的不同,您也许可以执行某种解决方法。例如,您可以尝试类似

RUN echo $(grep $(hostname) /etc/hosts | cut -f1) my.host.name >> /etc/hosts && install-software

通过在安装软件时在同一RUN命令中设置主机名,主机名将在容器的同一层内发生。Docker稍后将覆盖主机名,您必须在运行时重新设置主机名,但是您的软件可能还可以。

如果您必须执行很多操作,则可以尝试使用Packer构建容器。它可以构建Docker容器,但不使用多层。这使得重建速度较慢,下载构建的图像的速度更快,并且在将图像冻结到容器之前对图像执行多项操作更加方便。



 类似资料:
  • 我将html写成 现在我希望如果选项是1,那么它应该被选择为 请帮帮我!!!

  • 我们有几个域对象具有可为空的字段。我们已经读到hibernate需要“raw”对象来正确映射它,所以我们的getter返回optionals。我们的域对象如下所示: 但现在我们在解决/绑定这些字段时遇到了问题。jspx文件。(显示和表单输入字段。)对于基本类型和字符串,我们可以通过定义自定义OptionalToStringConverter绕过这一点。 对其他域对象的可空引用仍然是一个问题。 我们

  • 问题内容: 当用户将鼠标悬停在类名称为的元素上时,我尝试应用background-color 。 但是如果元素 也 有颜色,我不想更改颜色 注意:因为我在某种有限的环境中工作,所以只能使用CSS而不是JavaScript。 为了澄清,我的目标是为悬停时的第一个元素着色,而不是第二个元素。 的HTML 我在下面尝试过,希望第一个定义有效,但事实并非如此。我究竟做错了什么? 的CSS 问题答案: 一种

  • 我在表中显示了页面列表。每个页面都有属性主页,我希望在datatable中有一列单选按钮绑定到此属性,并且用户只能检查一个值。如何在服务器端获取此值? 我看到了一些类似以下的例子:http://jforum.icesoft.org/JForum/posts/list/14157.page,但我想知道在这种情况下最好的做法是什么。

  • 但是通过使用,我无法从目录中挑选特定的主机。但是我可以使用一些语法,如,但是它查找DNS条目并相应地执行,但是不会检查目录文件。 另一种方法是为每个主机创建单独的目录文件,并由开发人员根据请求的主机调用它们,我不知道这是多少推荐的方法。 最后一个方法是AFAIK通过Python使用,在主机名中使用模式并调用Python程序。 除了这些,您还知道在执行剧本时从目录中选择特定主机/主机组的其他方法吗?

  • 但是,我尝试运行,使用的目录仍然是我的默认目录。如何正确使用这个?