gpt4 book ai didi

docker - 如何在Docker容器中运行已安装的Shell脚本?

转载 作者:行者123 更新时间:2023-12-02 19:52:00 25 4
gpt4 key购买 nike

我正在尝试通过以下步骤在Docker容器中运行已安装的shell脚本:

  • 构建阶段:构建docker镜像。
  • 测试阶段:在运行时将目录安装到容器中,其中包含shell脚本文件。
  • 测试阶段:从docker内部运行shell脚本文件。

  • 有人可以解释一下该怎么做吗?

    查看行: #- ?? 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

    因为设置 bind-mount的语法是:
  • 要么docker run -v "$PWD/test":"/test" our-docker(-v--volume的缩写)
  • docker run --mount type=bind,source="$PWD/test",target="/test" our-docker

  • (注意:我在上面的 "$(pwd)"处替换了特殊的shell变量 "$PWD",这避免了旋转另一个过程。)

    接下来,您不能仅在 /test/check.sh行之后追加 docker run行,因为您恰恰需要在 docker run的上下文中运行该命令。为此,您可能要使用我在另一个SO线程中建议的模式: How do I set docker-credential-ecr-login in my PATH before anything else in GitLab CI(在该模式的上下文中包含有关 set -e的更多详细信息/说明,引号和 shell 转义)。

    包起来

    更准确地说,您可以尝试对 .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

    关于docker - 如何在Docker容器中运行已安装的Shell脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60004963/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com