如何在docker容器中运行挂载的shell脚本?

如何在docker容器中运行挂载的shell脚本?,docker,gitlab,gitlab-ci,Docker,Gitlab,Gitlab Ci,我正试图通过以下步骤在docker容器中运行挂载的shell脚本: 构建阶段:构建docker映像 测试阶段:在运行时将目录装入容器,其中包含一个shell脚本文件 测试阶段:从docker内部运行shell脚本文件 有人能解释一下应该怎么做吗 见第行:#-??我应该在这里运行测试:/TEST/check.sh??? services: - docker:dind stages: - build - test before_script: - dock

我正试图通过以下步骤在docker容器中运行挂载的shell脚本:

  • 构建阶段:构建docker映像
  • 测试阶段:在运行时将目录装入容器,其中包含一个shell脚本文件
  • 测试阶段:从docker内部运行shell脚本文件
  • 有人能解释一下应该怎么做吗

    见第行:
    #-??我应该在这里运行测试:/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形象
    建造:
    图片:docker:最新
    服务:
    -码头工人:丁
    在脚本之前:
    -docker登录docker.example.com-u$CI\u注册表用户-p$CI\u注册表密码
    仅:
    -主人
    脚本:
    -码头工人建造-我们的码头工人。
    -docker保存我们的docker>our-docker.tar
    人工产品:
    路径:
    -我们的码头工人
    过期时间:1周
    阶段:建造
    测试:
    图片:docker:最新
    仅:
    -主人
    脚本:
    -码头装卸货
    首先,docker run命令本身存在问题:

    docker run --volume source="$(pwd)/test",target="/test" our-docker  # buggy
    
    由于设置的语法是:

    • docker运行-v“$PWD/test”:“/test”我们的docker

      -v
      --volume
      的缩写形式)
    • 或者
      docker-run--mount-type=bind,source=“$PWD/test”,target=“/test”我们的docker
    (注意:我将上面的
    “$(pwd)”
    替换为特殊的shell变量
    “$pwd”
    ,它避免了另一个进程的旋转。)

    接下来,您不能只在
    docker run
    行之后附加行
    /test/check.sh
    ,因为您需要在
    docker run
    的上下文中运行该命令。为此,您可能希望使用我在另一个SO线程中提出的模式:(其中包含有关该模式上下文中的
    set-e
    、引号和shell转义的更多细节/备注)

    收尾 更准确地说,您能否尝试对
    .gitlab ci.yml
    进行以下改编?(我添加了一些有助于调试配置的
    ls
    命令):

    服务:
    -码头工人:丁
    阶段:
    -建造
    -试验
    在脚本之前:
    -码头工人信息
    #构建docker形象
    建造:
    图片:docker:最新
    服务:
    -码头工人:丁
    在脚本之前:
    -docker登录docker.example.com-u“$CI\u REGISTRY\u USER”-p“$CI\u REGISTRY\u PASSWORD”
    仅:
    -主人
    脚本:
    -码头工人建造-我们的码头工人。
    -docker保存我们的docker>our-docker.tar
    人工产品:
    路径:
    -我们的码头工人
    过期时间:1周
    阶段:建造
    测试:
    图片:docker:最新
    #注意:使用下面的/bin/sh,因为此图像不提供/bin/bash
    仅:
    -主人
    脚本:
    -码头装卸货
    首先,docker run命令本身存在问题:

    docker run --volume source="$(pwd)/test",target="/test" our-docker  # buggy
    
    由于设置的语法是:

    • docker运行-v“$PWD/test”:“/test”我们的docker

      -v
      --volume
      的缩写形式)
    • 或者
      docker-run--mount-type=bind,source=“$PWD/test”,target=“/test”我们的docker
    (注意:我将上面的
    “$(pwd)”
    替换为特殊的shell变量
    “$pwd”
    ,它避免了另一个进程的旋转。)

    接下来,您不能只在
    docker run
    行之后附加行
    /test/check.sh
    ,因为您需要在
    docker run
    的上下文中运行该命令。为此,您可能希望使用我在另一个SO线程中提出的模式:(其中包含有关该模式上下文中的
    set-e
    、引号和shell转义的更多细节/备注)

    收尾 更准确地说,您能否尝试对
    .gitlab ci.yml
    进行以下改编?(我添加了一些有助于调试配置的
    ls
    命令):

    服务:
    -码头工人:丁
    阶段:
    -建造
    -试验
    在脚本之前:
    -码头工人信息
    #构建docker形象
    建造:
    图片:docker:最新
    服务:
    -码头工人:丁
    在脚本之前:
    -docker登录docker.example.com-u“$CI\u REGISTRY\u USER”-p“$CI\u REGISTRY\u PASSWORD”
    仅:
    -主人
    脚本:
    -码头工人建造-我们的码头工人。
    -docker保存我们的docker>our-docker.tar
    人工产品:
    路径:
    -我们的码头工人
    过期时间:1周
    阶段:建造
    测试:
    图片:docker:最新
    #注意:使用下面的/bin/sh,因为此图像不提供/bin/bash
    仅:
    -主人
    脚本:
    -码头装卸货
    要运行测试,容器中是否有可用的脚本?您在访问时是否遇到任何错误?@salsinga否,错误是文件(check.sh)不存在,在装载后尝试访问它时,这就是为什么我不确定我是否在正确的路径上。这意味着您的脚本尚未装载。尝试使用copy命令并检查它是否工作,这样就排除了没有其他未知问题的可能性您想运行测试容器中是否有可用的脚本?您在访问过程中是否遇到任何错误?@salsinga否,错误是文件(check.sh)不存在,在装载后尝试访问它时,这就是为什么