首页 > 解决方案 > 如何将 JSON 中的值传递给 Docker 的 shell 脚本中的命令?

问题描述

我有一个 dockerfile 可以使用 Ubuntu 16.04 创建映像。在 docker 文件中:

# dotnet tool command
RUN apt-get install dotnet-sdk-2.2 -y
# for dot net tool
ENV PATH="${PATH}:/root/.dotnet/tools"
# jq command to read json file
RUN apt-get install jq -y
ADD xxx /xxx
# Copy the deploy-tool.json file
ADD deploy-tool.json /xxx/deploy-tool.json
# Copy the main sh script to xxx
ADD main-migrate.sh /xxx/main-migrate.sh
# Run the main sh script to run script in each xxx/*/bla..bla.sh 
RUN chmod +x /xxx/main-migrate.sh
RUN /permasense/main-migrate.sh

deploy-tool.json的如下:

{
    "name": "xxx.DEPLOY",
    "version": "1.2.3-dev.29"
}

这是main-migrate.sh

name = $(jq '.name' /xxx/deploy-tool.json)
nugetFileVersion = $(jq '.version' /xxx/deploy-tool.json)

# TODO how to pass value from JSON to the command below
# install dot net nuget
dotnet tool install -g $name --version "$nugetFileVersion" --add-source /xxx/

我有xxx.DEPLOY.nupkginxxx文件夹。

dockerfile运行时main-migrate.sh,我收到错误消息,抱怨找不到nameand 。nugetFileVersion

如何将name&nugetFileVersionjq命令传递到dotnet tool install上面,如图所示main-migrate.sh

谢谢

标签: shellsh

解决方案


这个想法是对的,但问题在于main-migrate.sh赋值语句中的脚本。Shell 分配不占用=符号周围的空格。应该是

name=$(jq '.name' /xxx/deploy-tool.json)
#  ^^^ no spaces
nugetFileVersion=$(jq '.version' /xxx/deploy-tool.json)
#              ^^^ no spaces

推荐阅读