问题描述
尝试通过运行简单的curl
与正在运行的docker容器进行通信:
curl -v -s -X POST http://localhost:4873/_session -d \'name=some\&password=thing\'
在任何shell(登录/交互式)中都能正常工作,但在脚本中执行此操作却很失败:
temp=$(curl -v -s -X POST http://localhost:4873/_session -d \'name=some\&password=thing\')
echo $temp
错误输出提示连接重置:
* Trying 127.0.0.1:4873...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 4873 (#0)
> POST /_session HTTP/1.1
> Host: localhost:4873
> User-Agent: curl/7.68.0
> Accept: */*
> Content-Length: 29
> Content-Type: application/x-www-form-urlencoded
>
} [29 bytes data]
* upload completely sent off: 29 out of 29 bytes
* Recv failure: Connection reset by peer <-- this! why?
* Closing connection 0
我迷路了,任何提示都值得赞赏。
PS:尝试不带subshell并发生相同的情况,因此这与脚本或脚本的执行方式有关。
编辑1 添加了docker compose文件。我不明白为什么常规shell可以工作,但是脚本却不能。请注意,脚本不是在docker内部运行的,它也是从主机运行的。
version: "2.1"
services:
verdaccio:
image: verdaccio/verdaccio:4
container_name: verdaccio-docker-local-storage-vol
ports:
- "4873:4873"
volumes:
- "./storage:/verdaccio/storage"
- "./conf:/verdaccio/conf"
volumes:
verdaccio:
driver: local
编辑2
因此,在脚本中执行temp=$(curl -v -s http://www.google.com)
效果很好。这是某种网络问题,但我仍然没有弄清楚原因。
编辑3 许多人建议重新格式化有效载荷数据,但是即使没有有效载荷,也会引发相同的错误。还要注意,我在Linux上,因此不确定在这里是否有任何可以发挥作用的权限。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)