docker 如何将参数传递给打包的容器操作?

iezvtpos  于 2023-03-29  发布在  Docker
关注(0)|答案(1)|浏览(123)

在GitHub Actions工作流的作业定义中,我使用以下外部操作定义:

- name: Wait for backend
  uses: nev7n/wait_for_response@v1
  with:
    url: http://localhost:5984/hyperglosae
    responseCode: 401

它工作正常,但需要42秒来构建相应的Docker镜像。
日志显示,当为此映像启动容器时,将使用以下参数调用该容器:"http://localhost:5984/hyperglosae" "401" "30000" "200"
为了加快这个过程,我构建并发布了与此操作对应的图像。
根据格式规范,我将uses部分更改为:

uses: docker://benel/wait-for-response:1

正如预期的那样,拉取镜像的速度(2秒)远远快于构建镜像的速度(42秒)。但是当镜像作为容器运行时,它会失败:

invalid value "" for flag -code: parse error

日志显示,在映像ID之后没有更多的参数发送到docker run
由于格式规范没有指定当使用Docker镜像设置uses时如何使用with,我尝试了不同的方法来格式化上面提到的参数。但是没有一个成功。

f8rj6qna

f8rj6qna1#

有几个选项:
1.然后通过with: args:

- uses: docker://benel/wait-for-response:1
  with:
    args: "a single long string that you've put all the args into"

1.通过环境变量传递它们:

- uses: docker://benel/wait-for-response:1
  env:
    code: 123

1.创建一个使用此docker镜像的自定义操作,而不是直接从工作流调用它:

# action.yml
name: 'Hello World'
description: 'Greet someone and record the time'
inputs:
  who-to-greet:  # id of input
    description: 'Who to greet'
    required: true
    default: 'World'
outputs:
  time: # id of output
    description: 'The time we greeted you'
runs:
  using: 'docker'
  image: docker://benel/wait-for-response:1
  args:
    - ${{ inputs.who-to-greet }}

可以看到,可以通过args部分传递参数。

相关问题