docker - 我如何在 docker 构建过程中传递参数或绕过它?

标签 docker docker-compose dockerfile docker-swarm docker-machine

我为我的 PHP 应用程序编写了一个 Dockerfile,而不是从 dockerhub 我从头开始创建它。

例如:

 FROM ubuntu:18.04
 RUN apt-get update && \
       apt-get install -y --no-install-recommends apt-utils && \
       apt-get -y install sudo

 RUN sudo apt-get install apache2 -y
 RUN sudo apt-get install mysql-server -y
 RUN sudo apt-get install php libapache2-mod-php -y 
 RUN rm -rf /var/www/html/
 COPY . /var/www/html/
 WORKDIR /var/www/html/
 EXPOSE 80
 RUN chmod -R 777 /var/www/html/app/tmp/

 CMD systemctl restart apache2

在这一步:
 RUN sudo apt-get install php libapache2-mod-php -y

我被卡住了,因为它要求用户输入,比如:

请选择您居住的地理区域。后续配置
问题将通过提供城市列表来缩小范围,代表
它们所在的时区。
  • 非洲 4. 澳大利亚 7. 大西洋 10. 太平洋 13. 等
  • 美洲 5. 北极 8. 欧洲 11. SystemV
  • 南极洲 6. 亚洲 9. 印度 12. 美国
    地理区域:

  • 我无法提前,我是这样尝试的:
    RUN sudo apt-get install php libapache2-mod-php -y 9
    

    但是没有结果,请帮忙

    最佳答案

    您可以设置环境变量 DEBIAN_FRONTEND=noninteractiveDEBCONF_NONINTERACTIVE_SEEN=true在您的 Dockerfile 中,在 RUN sudo apt-get install php libapache2-mod-php -y 之前.

    您的 Dockerfile 应如下所示:

    FROM ubuntu:18.04
    
    
    RUN apt-get update && \
           apt-get install -y --no-install-recommends apt-utils && \
           apt-get -y install sudo
    
    RUN sudo apt-get install apache2 -y
    RUN sudo apt-get install mysql-server -y
    
    
    ## for apt to be noninteractive
    ENV DEBIAN_FRONTEND noninteractive
    ENV DEBCONF_NONINTERACTIVE_SEEN true
    
    ## preesed tzdata, update package index, upgrade packages and install needed software
    RUN echo "tzdata tzdata/Areas select Europe" > /tmp/preseed.txt; \
        echo "tzdata tzdata/Zones/Europe select Berlin" >> /tmp/preseed.txt; \
        debconf-set-selections /tmp/preseed.txt && \
        apt-get update && \
        apt-get install -y tzdata
    
    
    
    RUN sudo apt-get install php libapache2-mod-php -y
    RUN rm -rf /var/www/html/
    COPY . /var/www/html/
    WORKDIR /var/www/html/
    EXPOSE 80
    RUN chmod -R 777 /var/www/html/app/tmp/
    
    CMD systemctl restart apache2
    

    你应该换 EuropeBerlin随心所欲。

    关于docker - 我如何在 docker 构建过程中传递参数或绕过它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53079135/

    相关文章:

    docker - 如何从主机MacOS机器内部连接到在Docker容器上运行的服务?

    python - 如何连接到http ://localhost:9000/api/v1/data from jupyter in docker

    java - 当尝试在多阶段 docker 构建中复制它时,我找不到我的 jar 文件

    php - Erros使用PHP和Twig镜像Docker

    node.js - HAProxy 未正确运行 nodeJS API

    docker - 未从dockerfile发布具有Net Core 3.1 API的Dockerfile

    asp.net - 将 Docker 部署到离线 PC

    Docker 409 客户端错误。如何获取真实错误并查看容器中的真实日志?

    java - Docker depends_on 命令不工作