无法通过 docker 容器内的 shell 脚本访问 JSON 文件

Unable to access JSON file through shell script inside docker container

我正在尝试通过创建一个容器 (data-loader) 使用另一个容器 (即 my-blog-container) 的 REST 端点来填充数据,为此我 运行 shell 脚本 dataloader.sh 在容器内(即 data-loader)。在 shell 脚本中,我试图访问 json 文件(即 mydata.json)以在 shell 脚本中进行 POST 调用,而 运行 容器。

Basically Goal is to populate the data by spinning up the container on its own.

但我的容器出现错误:

Warning: Couldn't read data from file 
Warning: "mydata.json", this makes an empty
Warning: POST.

docker-compose.yaml

  data-loader:
    <<: *my-base-service
    build:
      context: .
      dockerfile: Dockerfile.dataloader
      args:
        IMAGE_NAME: <alpine base image>
    container_name: data-loader
    volumes:
      - $MY_PATH/config/mydata.json

Dockerfile.dataloader

ARG IMAGE_NAME
FROM ${IMAGE_NAME}

USER root
RUN apk update && apk upgrade && apk add curl
COPY dataloader.sh /
RUN chmod +x /dataloader.sh

ENTRYPOINT [ "sh", "/dataloader.sh" ]

dataloader.sh

response=$(curl -X POST "http://myblogcontainer:8080/blog/create" -H "accept: */*" -H "Content-Type: application/json" \
       -d @mydata.json)
echo ${response}

我想使用这个 json 文件填充数据。但无法做到。请帮帮我。

如有任何疑问,欢迎随时提问。 提前致谢:)

假设您有一个冒号作为 MY_PATH 的一部分,您将文件装载到 /config/ 但您在脚本中使用了相对路径。

如果您的工作目录不是/config,那么您的脚本将找不到该文件。为确保您可以使用绝对路径。

-d '@/config/mydata.json'

一般来说,在这种情况下,通过交互式进入容器在文件系统中四处寻找来进行一些调试是很有用的。或者通过向您的脚本添加一些打印语句来确保您的假设是正确的。

另请注意,您的脚本缺少 shebang。默认的解释器实际上是 sh,所以它可以工作,但是无论如何添加一个都是很好的做法。

您可能还应该在使用时将变量 response 双引号以防止单词拆分和通配。