Docker容器和本地cURL调用

我在同一台服务器上的两个docker容器之间进行cURL调用时遇到了麻烦。

您将find所有正在运行的容器:

这里

“仪表板”容器托pipe一个可通过URL https://www.myapp.com/访问的webapp

“api”容器托pipe另一个可用URL https://api.myapp.com访问的webapp

我不能在仪表板容器内对https://api.myapp.com进行cURL调用。 我每次都有超时错误。

也许有一个路由问题或别的什么?

现在唯一的方法是使用“local notation” http:// air360-api:8082 /来使URLcurl。

我使用docker run命令使用多个DockerFile。

你能帮我解答吗? 谢谢 !

PS:url已伪造,请勿尝试打电话给他们:D


编辑1添加dockerfile / init:

我通过运行以下cmd来启动docker实例:

docker run -t -d -p“80:80”-p“443:443”–dns“8.8.8.8”–dns“8.8.4.4” – 链接“dashboard-dev” – 链接“dashboard” – 链接“api” – 链接“媒体” – 链接“前”apache“

这里是API容器的dockerfile。 它与仪表板dockerfile相同,只是不同的项目:

FROM microsoft/dotnet:2.0-sdk # Install dependencies RUN apt-get update -y RUN apt-get install -y python-pip python-setuptools python-dev build-essential RUN pip install --upgrade pip RUN pip install ua-parser --no-cache-dir # Set environment variables ENV ASPNETCORE_URLS="http://*:8082" ENV ASPNETCORE_ENVIRONMENT="Development" # Copy files to app directory COPY . /app # Set working directory WORKDIR /app/API-Project # Restore NuGet packages RUN ["dotnet", "restore"] # Open up port EXPOSE 8082 # Run the app ENTRYPOINT ["dotnet", "run"] 

你看到超时的原因可能来自一些防火墙规则(iptables)。 解决方法是“不要这样做”从容器到外部地址/端口。 只要容器内外的端口匹配(例如将容器中的端口80映射到主机上的80端口),那么您可以完全透明地更改容器。

将您的容器放在同一个dockernetworking上,并使用dockernetworking来谈谈容器到容器(而不是使用链接)。 然后在networking上使用别名来连接容器到容器,但使用外部地址。 这里有一个例子,我从networking别名的traefik容器,“代理”networking提前创build一个docker network create -d overlay proxy (这是为群模式,所以如果你只是运行删除-d overlay这些在一个主机上)。

以下是我的docker-compose.yml的相关部分:

 version: '3.3' networks: proxy: external: name: proxy services: traefik: image: traefik:1.4 networks: - proxy: aliases: - proxy.example.com ports: - target: 80 protocol: tcp published: 80 mode: ingress 

因此,连接到“proxy.example.com”的代理networking上的任何其他容器都将直接进入traefik容器。 将traefikreplace为您自己的apache容器和主机名,以将其应用于您的scheme。