簡體   English   中英

在 Docker 容器中添加交互式用戶輸入,例如“讀取”

[英]Adding interactive user input e.g., `read` in a Docker container

我想制作一個可以執行以下操作的 Docker 鏡像:

  1. 使用read獲取用戶輸入並將其存儲在局部變量中
  2. 將該變量用於以后的命令

使用它,我有以下 Dockerfile:

FROM ubuntu
RUN ["echo", "'Input something: '"]
RUN ["read", "some_var"]
RUN ["echo", "You wrote $some_var!"]

在運行docker build ,會產生以下輸出:

Sending build context to Docker daemon  3.072kB
Step 1/4 : FROM ubuntu
 ---> 4e2eef94cd6b
Step 2/4 : RUN ["echo", "'Input something: '"]
 ---> Using cache
 ---> a9d967721ade
Step 3/4 : RUN ["read", "some_var"]
 ---> Running in e1c603e2d376
OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"read\": executable file not found in $PATH": unknown

read似乎是一個內置的 bash “函數”,因為which read不會產生任何結果。 我取代["read", "some_var"]["/bin/bash -c read", "some_var"]["/bin/bash", "-c", "read", "some_var"] ,但兩者都產生以下結果:

...
Step 3/4 : RUN ["/bin/bash -c read", "some_var"]
 ---> Running in 6036267781a4
OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"/bin/bash -c read\": stat /bin/bash -c read: no such file or directory": unknown
...
Step 3/4 : RUN ["/bin/bash", "-c", "read", "some_var"]
 ---> Running in 947dda3a9a6c
The command '/bin/bash -c read some_var' returned a non-zero code: 1

此外,我還用RUN read some_var替換了它,但結果如下:

...
Step 3/4 : RUN read some_var
 ---> Running in de0444c67386
The command '/bin/sh -c read some_var' returned a non-zero code: 1

誰能幫我這個?

一種解決方案是使用外部 shell 腳本並使用ENTRYPOINT

run.sh

#!/bin/bash
echo "Input something!"
read some_var
echo "You wrote ${some_var}!"

Dockerfile內容:

FROM ubuntu
COPY "run.sh" .
RUN ["chmod", "+x", "./run.sh"]
ENTRYPOINT [ "./run.sh" ]

這將允許./run.sh在容器旋轉時運行:

$ docker build -t test .
Step 1/4 : FROM ubuntu
 ---> 4e2eef94cd6b
Step 2/4 : COPY "run.sh" .
 ---> 37225979730d
Step 3/4 : RUN ["chmod", "+x", "./run.sh"]
 ---> Running in 5f20ded00739
Removing intermediate container 5f20ded00739
 ---> 41174edb932c
Step 4/4 : ENTRYPOINT [ "./run.sh" ]
 ---> Running in bed7717c1242
Removing intermediate container bed7717c1242
 ---> 554da7be7972
Successfully built 554da7be7972
Successfully tagged test:latest

$ docker run -it test
Input something!
Test message 
You wrote Test message!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM