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。