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

时间:2018-07-17 11:01:50

标签: docker dockerfile interactive

我创建了一个运行命令行工具的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文件中执行此操作。

EDIT2: 这不是Interactive command in Dockerfile的副本,因为我的问题解决了一个问题,即如何避免为docker run指定的参数,而有利于在Dockerfile中指定它们,而假定的副本解决了以下问题:由docker本身构建映像。

4 个答案:

答案 0 :(得分:2)

许多docker run选项只能在命令行或通过更高级别的包装程序(shell脚本,Docker Compose,Kubernetes等)指定。除了端口映射和网络设置外,“交互”和“ tty”选项只能在运行时设置,您不能在Dockerfile中强制使用。

答案 1 :(得分:0)

您可以使用docker run命令。

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

约定是:

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

其中[COMMAND]curl,而[ARG...]curl参数,在我的示例中是https://stackoverflow.com

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

答案 2 :(得分:0)

您是否正在寻找-it选项?

来自Docker documentation

  

对于交互式进程(如shell),必须同时使用-i -t   为了为容器进程分配一个tty。

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

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

答案 3 :(得分:0)

实际上,在Ubuntu中,我在后台运行Apache Server。

但是对于您来说,请尝试以下命令,您应该可以进入docker容器。

docker exec -i -t your_container_name bash