Docker构建镜像时要求输入问题

55次阅读
没有评论

问题描述

在构建一个运行在CentOS上的FTP服务器镜像时,遇到了一个问题。他的Dockerfile内容如下:

FROM centos
RUN \
  yum update -y && \
  yum install vsftpd -y
EXPOSE 21
CMD vsftpd -DFOREGROUND

他运行了以下命令:

docker build -f webserver .

但是构建过程中要求他输入以下内容:

Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the time zones in which they are located.
   1. Africa      4. Australia  7. Atlantic  10. Pacific  13. Etc
   2. America     5. Arctic     8. Europe    11. SystemV
   3. Antarctica  6. Asia       9. Indian    12. US
Geographic area: 9

一旦他输入了9并按下回车键,程序就卡在了同一个窗口。请问如何解决这个问题?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

Docker构建过程是非交互式的,所以你需要找到一种方法让它不再要求输入。解决方法是在安装vsftpd之前,通过Dockerfile创建必要的配置文件,并将其放置在正确的位置。这些问题只是为了让vsftpd为自己生成一个或多个配置文件。你需要事先创建一个配置文件,并在运行yum install之前使用copy命令将其放置在正确的位置。如果vsftpd找到了有效的配置文件,它就不会再要求输入了。
以下是一个示例Dockerfile:

FROM centos
COPY vsftpd.conf /etc/vsftpd/vsftpd.conf
RUN \
  yum update -y && \
  yum install vsftpd -y
EXPOSE 21
CMD vsftpd -DFOREGROUND

在上面的示例中,我们通过copy命令将事先准备好的vsftpd.conf文件复制到了/etc/vsftpd/vsftpd.conf位置。这样,在运行yum install之前,vsftpd就能找到有效的配置文件,不再要求输入了。

方案2

请注意以下操作注意版本差异及修改前做好备份。
另一种解决方法是在构建命令中指定一个有效的配置文件。你可以在构建命令中使用--build-arg参数来传递一个环境变量,然后在Dockerfile中使用这个环境变量来指定配置文件的位置。
以下是一个示例Dockerfile:

FROM centos
ARG VSFTPD_CONF=/etc/vsftpd/vsftpd.conf
COPY $VSFTPD_CONF /etc/vsftpd/vsftpd.conf
RUN \
  yum update -y && \
  yum install vsftpd -y
EXPOSE 21
CMD vsftpd -DFOREGROUND

在上面的示例中,我们使用了一个VSFTPD_CONF环境变量来指定配置文件的位置。在构建命令中,我们使用--build-arg参数将有效的配置文件路径传递给了这个环境变量。然后,在Dockerfile中,我们使用COPY命令将配置文件复制到了正确的位置。这样,在运行yum install之前,vsftpd就能找到有效的配置文件,不再要求输入了。
请注意,你需要根据实际情况修改配置文件的路径和名称。

正文完