我创建了一个运行命令行工具的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本身构建映像。
答案 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
选项?
对于交互式进程(如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