我找到了解决方法。看来,如果我将命令更改为:
command: ["/scripts/wait-for-it.sh", "localhost:8883"]
并设置network_mode
network_mode: host
终于可以了。但是,对我来说,这似乎太过时了,无法解决。
这对我来说是个头疼的问题。我创建了一个docker-compose文件,该文件生成了三个图像:amazon / aws-iot-greengrass图像,postgres图像(我仅用于验证可以连接到应用程序图像中的任何内容)和一个应用程序来自python:3.7-alpine的图片。
我使用常用的wait-for-it.sh作为命令。成功之后,我将调用我的输入脚本。
问题在于,在等待greengrass:8883出现时,wait-for-it总是超时。
如果我打电话:
./wait-for-it.sh 127.0.0.1:8883
在主机上,它可以工作。
此外,我可以从容器中ping草。 如您在附件docker-compose.yml中的注释中所看到的,我还可以在db:5432映像上调用wait-for-it,它会成功。
version: '3'
services:
# web:
# build: .
# ports:
# - "5000:5000"
application:
depends_on: [greengrass]
build: .
# image: ubuntu:latest
volumes:
- .:/scripts
# command: ["ping","greengrass"] <--works
# command: ["/scripts/wait-for-it.sh", "greengrass:8883"] # <-- This times out
command: ["/scripts/wait-for-it.sh", "db:5432"] # <-- This works!
greengrass:
image: "amazon/aws-iot-greengrass"
volumes:
- ./certs/certs:/greengrass/certs
- ./certs/config:/greengrass/config
ports:
- "8883:8883"
expose:
- "8883"
entrypoint:
- /greengrass-entrypoint.sh
db:
image: postgres
ports:
- "5432:5432"
有效方法:
-命令:[“ ping”,“ greengrass”]
-命令:[“ / scripts / wait-for-it.sh”,“ db:5432”]
-在主机上调用“ ./scripts/wait-for-it.sh 127.0.0.1:8883”
什么不起作用:
-命令:[“ / scripts / wait-for-it.sh”,“ greengrass:8883”]