Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何在Docker yml文件中运行curl命令?_Windows_Docker_Curl - Fatal编程技术网

Windows 如何在Docker yml文件中运行curl命令?

Windows 如何在Docker yml文件中运行curl命令?,windows,docker,curl,Windows,Docker,Curl,我有两个docker容器,它们在docker compose中运行,但不再相互通信(尝试执行GraphQL变异时出现连接拒绝错误)。要调试它,我想用一个简单的curl命令替换其中一个 原始yml: services: backend_container: container_name: backend_container image: backend_container:latest command: parm1 parm2 volumes: -

我有两个docker容器,它们在docker compose中运行,但不再相互通信(尝试执行GraphQL变异时出现连接拒绝错误)。要调试它,我想用一个简单的curl命令替换其中一个

原始yml:

services:
  backend_container:
    container_name: backend_container
    image: backend_container:latest
    command: parm1 parm2
    volumes:
      - /c/path_to_data:/data/in
    ports:
      - 19777:19777
    depends_on:
      - ui_container
    
  ui_container:
    container_name: ui_container
    image: ui_container:latest
    ports:
      - 801:8080
拟议的yml:

services: 
  test_ui:
    container_name: test_ui
    volumes:
      - /c/path_to_data:/data/in
         depends_on:
      - ui_container
    command: 
    bash -c 'curl -X POST --data-binary \"@/data/in/my_query.txt\" -H \"Content-Type: application/json\" -H 
       \"Accept: application/json\" 
       http://ui_container:8080/graphql'

  ui_container:
    same as before
我是新码头工人,所以我有几个问题:

  • 这样做有意义吗(将卷发作为服务)
  • 我试图在curl命令中转义引号和冒号,但我得到一个错误
    scannerror:这里不允许映射值指向“Accept”之后的冒号
  • […]将curl作为服务是否有意义
  • 不是真的。可能是为了进行非常短期的调试,但一般来说,一个立即退出的命令并不是一个好的组合服务。更好的方法可能是使用一个类似配置的容器,并使用一个备用命令:

    docker-compose run backend_container \
      curl --data-binary @/data/in/my_query.txt ...
    
  • 我尝试在curl命令中转义引号和冒号
  • YAML有几种引用和转义字符串的方法。在这里,我可能会使用一个:您可以跨多行编写一个字符串,它将被折叠成一行,以空格分隔。这个特定的调用不需要
    sh-c
    包装器(只有当您有shell重定向或环境变量引用时才需要它)和跳过,这也节省了引用级别

    命令:>-
    卷曲
    -X柱
    --数据二进制@/data/in/my_query.txt
    -H“内容类型:应用程序/json”
    -H“接受:应用程序/json”
    http://ui_container:8080/graphql
    
    这里的另一个好方法是使用
    命令的列表形式
    。同样,这里不能使用shell构造,但可以(而且必须)明确指定“单词”是什么

    命令:
    -卷曲
    --X
    -职位
    ---数据二进制
    -@/data/in/my_query.txt
    --H
    
    -“内容类型:application/json”#谢谢,非常有用。是否应该
    docker compose运行backend\u container\curl--data binary@/data/in/my\u query.txt…“be”docker compose运行ui\u container…
    ?或者我需要单独运行所有其他容器吗?另外,如果使用
    run
    ,如何给出容器参数?使用
    docker compose.yml
    文件中的大多数设置(它覆盖
    命令:
    ,并故意忽略
    端口:
    )。我猜您想测试来自另一个容器的客户端调用,这就是我使用该容器名称的原因。
    command:
      - curl
      - -X
      - POST
      - --data-binary
      - @/data/in/my_query.txt
      - -H
      - "Content-Type: application/json" # <-- YAML string quoting
      - -H
      - "Accept: application/json"
      - "http://ui_container:8080/graphql"