标题几乎说明了一切,但让我给出一些背景信息。
我有一个运行一个容器的MySQL实例,一个运行在另一个容器中的API,以及一个运行在第三个容器中的脚本。该脚本命中(或应该命中)在第二个中运行的API。这些都在同一台物理机器上(在DigitalOcean上)。
我在Dockerfile中公开了我们正在使用的端口(8080),并在运行时使用-p 8080:8080
为API公开。我的脚本正确指向API IP。
在其他环境(AWS,RaspPI)中,此设置可正常运行。但是,在DigitalOcean上,它根本不起作用。我的脚本尝试命中数据库API失败了。
奇怪的是,从主机到API端点的cURLing工作正常,因此API本身正在运行。但是,使用docker exec从脚本docker容器内部进行操作会导致每次都超时 - 这与我在脚本中遇到的问题相同。
我唯一猜测的是,它与Docker Droplet的DigitalOcean配置设置有关,或者Docker具有我缺少的容器间通信配置。
TL; DR:来自主机的cURL - > Docker容器API有效。来自同一台机器上的Docker容器的cURL - > Docker容器API没有。
无论如何,如果你们中的任何人想要更多信息,请不要犹豫:)干杯!