问题描述
在构建一个运行在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就能找到有效的配置文件,不再要求输入了。
请注意,你需要根据实际情况修改配置文件的路径和名称。