![](/img/trans.png)
[英]how to read input of shell-script in docker container creating in detach mode
[英]How to run a mounted shell-script inside a docker container?
我正在嘗試按照以下步驟在 docker 容器內運行已安裝的 shell 腳本:
有人可以解釋一下應該如何做嗎?
見行: #- ?? HERE I SHOULD RUN THE TEST: /test/check.sh ??
#- ?? HERE I SHOULD RUN THE TEST: /test/check.sh ??
services:
- docker:dind
stages:
- build
- test
before_script:
- docker info
# Build the docker image
build:
image: docker:latest
services:
- docker:dind
before_script:
- docker login docker.example.com -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
only:
- master
script:
- docker build -t our-docker .
- docker save our-docker > our-docker.tar
artifacts:
paths:
- our-docker.tar
expire_in: 1 week
stage: build
test:
image: docker:latest
only:
- master
script:
- docker load < our-docker.tar
- docker run --volume source="$(pwd)/test",target="/test" our-docker
#- ?? HERE I SHOULD RUN THE TEST: /test/check.sh ??
stage: test
首先, docker run
命令本身存在問題:
docker run --volume source="$(pwd)/test",target="/test" our-docker # buggy
因為設置綁定安裝的語法是:
docker run -v "$PWD/test":"/test" our-docker
-v
是--volume
的縮寫形式)docker run --mount type=bind,source="$PWD/test",target="/test" our-docker
(注意:我用特殊的 shell 變量"$PWD"
替換了上面的"$(pwd)"
,以避免旋轉另一個進程。)
接下來,你不能只是追加行/test/check.sh
后docker run
線路,因為你正好需要的范圍內運行該命令docker run
。 為此,您可能想使用我在另一個 SO 線程中提出的模式:如何在 GitLab CI 中的任何其他內容之前在我的 PATH 中設置 docker-credential-ecr-login (其中包含有關set -e
更多詳細信息/備注、引號和外殼在該模式的上下文中轉義)。
更准確地說,您可以嘗試對.gitlab-ci.yml
進行以下改編嗎? (我添加了一些ls
命令來幫助調試您的配置):
services:
- docker:dind
stages:
- build
- test
before_script:
- docker info
# Build the docker image
build:
image: docker:latest
services:
- docker:dind
before_script:
- docker login docker.example.com -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
only:
- master
script:
- docker build -t our-docker .
- docker save our-docker > our-docker.tar
artifacts:
paths:
- our-docker.tar
expire_in: 1 week
stage: build
test:
image: docker:latest
# note: use /bin/sh below as this image doesn't provide /bin/bash
only:
- master
script:
- docker load < our-docker.tar
- echo "$PWD"
- ls
- ls -Rhal test
- |
docker run --rm -v "$PWD/test":"/test" our-docker /bin/sh -c "
set -ex
ls -Rhal /test
/test/check.sh
"
stage: test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.