我是碼頭世界的新手。我必須調用一個shell腳本,它通過docker容器接受命令行參數。 例如:我的shell腳本的樣子:如何通過docker run將參數傳遞給Shell腳本
#!bin/bash
echo $1
Dockerfile看起來是這樣的:
FROM ubuntu:14.04
COPY ./file.sh/
CMD /bin/bash file.sh
我不知道怎麼樣,如果你想運行傳遞參數,同時運行的容器
我是碼頭世界的新手。我必須調用一個shell腳本,它通過docker容器接受命令行參數。 例如:我的shell腳本的樣子:如何通過docker run將參數傳遞給Shell腳本
#!bin/bash
echo $1
Dockerfile看起來是這樣的:
FROM ubuntu:14.04
COPY ./file.sh/
CMD /bin/bash file.sh
我不知道怎麼樣,如果你想運行傳遞參數,同時運行的容器
@ user1801934,你肯定@Gilles Quenot的答案是正確的嗎?
把arg1直接放到Dockerfile中,是你的請求嗎?
這是我的答案。
更新file.sh
#!/usr/bin/env bash
echo $1
使用存在Dockerfile
構建圖像:
docker build -t test .
與參數abc
或xyz
或別的東西運行圖像。
docker run -ti test /file.sh abc
docker run -ti test /file.sh xyz
它@build時間:
CMD /bin/bash /file.sh arg1
如果你想運行它@run時間:
ENTRYPOINT ["/bin/bash"]
CMD ["/file.sh", "arg1"]
然後在主機外殼
docker build -t test .
docker run -i -t test
'ENTRYPOINT'是誰,我認爲想要運行時OP一個很好的答案,但如果你真的想建立時間變量這個答案只是被打破。使用'ARG'和'docker build --build-arg' https://docs.docker.com/engine/reference/builder/#arg –
使用Docker,傳遞這類信息的正確方法是通過環境變量。
,以便具有相同Dockerfile,腳本改爲
#!/bin/bash
echo $FOO
建設後,請使用以下命令泊塢窗:
docker run -e FOO="hello world!" test
爲什麼這是最高的投票答案?環境變量是另一種傳遞信息的方式,但不是OP所要求的。當然OP的願望是將容器傳遞給容器絕對沒有任何不妥之處。 –
@PartlyCloudy我認爲人們喜歡這個,因爲它聲稱給出了「正確的」答案,儘管顯然是錯誤的。 Docker的一個主要設計原則是優先考慮教條的常識。 – augurar
我有什麼是實際運行的東西的腳本文件。這個腳本文件可能相對複雜。我們稱之爲「run_container」。該腳本接受參數的命令行:
run_container p1 p2 p3
簡單run_container可能是:
#!/bin/bash
echo "argc = ${#*}"
echo "argv = ${*}"
我想要做的是,「dockering」這一點,我想能夠啓動這個後與搬運工命令行上的參數,如此容器:
docker run image_name p1 p2 p3
和已在run_container腳本可以與P1 P2 P3作爲參數運行。
這是我的解決方案:
Dockerfile:
FROM docker.io/ubuntu
ADD run_container/
ENTRYPOINT ["/bin/bash", "-c", "/run_container ${*}", "--"]
用'「/ run_container \」替換'ENTRYPOINT'數組中的第三個值$ @ \「」'表示包含空格的參數被正確處理(例如'docker run image_name foo'bar baz'quux')。 – davidchambers
這個腳本在file.sh
#!/bin/bash
echo Your container args are: "[email protected]"
這Dockerfile
FROM ubuntu:14.04
COPY ./file.sh/
ENTRYPOINT ["/file.sh"]
CMD []
你應該能夠:
% docker build -t test .
% docker run test hello world
Your container args are: hello world
如果您像我一樣忘記了「/ file.sh」周圍的「」,它將不起作用。 – kev
我認爲如果你不想讓最終用戶使用ENTRYPOINT,用戶直接瞭解file.sh。 –
你怎麼才能啓動一個像'docker run -ti test /file.sh abc'這樣的腳本。我覺得腳本不會運行,因爲它應該是'docker run -ti test sh /file.sh abc'。 sh或/ bin/sh將運行正確。 –
對於任何人來到這裏。/usr/bin/env技巧是可選的樣式首選項,並不需要使其工作。另外#!線表示使用購買默認的解釋器。所以它可以通過調用腳本來運行。 – wheredidthatnamecomefrom