代码之家  ›  专栏  ›  技术社区  ›  SpaceTrucker

如何在Dockerfile中指定图像是交互式的?

  •  4
  • SpaceTrucker  · 技术社区  · 6 年前

    我创建了一个运行命令行工具的Docker容器。容器应该是交互式的。我能说明一下吗 在dockerfile中 容器总是以交互模式启动?

    作为参考,这是dockerfile:

    FROM ubuntu:latest
    
    RUN apt-get update && apt-get -y install curl
    
    RUN mkdir adr-tools && \
        cd adr-tools && \
        curl -L https://github.com/npryce/adr-tools/archive/2.2.0.tar.gz --output adr-tools.tar.gz && \
        tar -xvzf adr-tools.tar.gz && \
        cp */src/* /usr/bin && \
        rm -rf adr-tools
    
    CMD ["/bin/bash"]
    

    编辑: 我知道 -it 的选项 run 命令。我明确要求在Docker文件中找到一种方法。

    小精灵: 这不是的副本 Interactive command in Dockerfile 因为我的问题解决了一个关于如何指定参数的问题 docker run 可以避免在dockerfile中指定它们,而假定的副本在docker自己构建图像的过程中解决了交互输入的问题。

    4 回复  |  直到 6 年前
        1
  •  2
  •   David Maze    6 年前

    很多 docker run 只能在命令行或通过更高级别的包装器(shell脚本、docker compose、kubernetes和c)指定选项。除了端口映射和网络设置,交互和tty选项只能在运行时设置,并且不能在 Dockerfile .

        2
  •  0
  •   juanlumn    6 年前

    你在找 -it 选择?

    来自 Docker documentation :

    对于交互进程(如shell),必须同时使用-i-t 以便为容器进程分配TTY。

    例如,您可以像这样运行它:

    docker run -it IMAGE_NAME [COMMAND] [ARG...]
    
        3
  •  0
  •   Rohan J Mohite    6 年前

    实际上,在Ubuntu中,我在后台运行Apache服务器。

    但是对于您来说,尝试使用下面的命令,您应该能够进入docker容器。

    docker exec -i -t your_container_name bash
    
        4
  •  0
  •   Alexander Zeitler    6 年前

    您可以使用 docker run 命令。

    docker build -t curly .
    docker run -it curly curl https://stackoverflow.com
    

    公约是:

    docker run -it IMAGE_NAME [COMMAND] [ARG...]
    

    在哪里? [COMMAND] curl [ARG...] 是吗? 卷曲 参数,即 https://stackoverflow.com 在我的例子中。

    -i 启用交互进程模式。不能在中指定 Dockerfile .
    -t 为容器分配一个伪tty。