Docker-Compose:无法从另一个容器连接到Amazon / aws-iot-greengrass容器

时间:2019-06-26 16:18:27

标签: amazon-web-services docker networking docker-compose greengrass

更新:

我找到了解决方法。看来,如果我将命令更改为:

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,它会成功。

docker-compose.yml

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”]

0 个答案:

没有答案