[英]Use here document with ENTRYPOINT/CMD in Dockerfile
我的目標是最終得到一個Docker映像,該映像在容器啟動后立即從stdin讀取輸入,直到遇到EOF。 然后,它僅將已讀取的內容寫回stdout。
基本上,我的想法是應該可以通過使用此處文檔的語法cat << EOF
來實現這一點。
到目前為止,我嘗試使用CMD Dockerfile指令嘗試不同的變體,但到目前為止沒有成功。 從創建的所有映像中,我使用docker run -it myimage
啟動了容器,以保持容器的stdin連接。
FROM alpine 3.7
CMD ["cat", "<<", "EOF"]
這導致以下錯誤:
cat: can't open '<<': No such file or directory
cat: can't open 'EOF': No such file or directory
FROM alpine 3.7
CMD ["cat << EOF"]
結果:
container_linux.go:265: starting container process caused "exec: \"cat << EOF\": executable file not found in $PATH"
FROM alpine:3.7
CMD ["sh", "-c", "cat << EOF"]
結果:
這什么也不做,只是立即返回。
FROM alpine: 3.7
CMD "cat << EOF"
結果:
/bin/sh: cat << EOF: not found
我正在尋找一種行為如上所述的解決方案。 以下docker run
命令可完美docker run
,但我想將此定義為Docker映像的默認入口點:
$ docker run -it alpine cat << EOF
> Hello Docker
> EOF
Hello Docker
這是行不通的,因為外殼程序會在執行命令行之前解析命令行,包括heredoc。
基本上,您可以這樣做:
# Dockerfile
FROM xyz
# cat reads from stdin by default if no filename gets passed to it
CMD 'cat'
生成並運行容器:
docker build -t foo .
docker run -ti foo
HelloDocker
HelloDocker
您可以使用Ctrl + d停止輸入(實際上是EOF)
PS:如果要使用Here-doc,請像這樣運行以上容器:
docker run -i foo <<EOF
Hello Docker
EOF
Hello Docker
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.