我无法在同一台服务器上的两个docker容器之间进行cURL调用。
您将找到所有正在运行的容器:
“信息中心”容器托管了一个可通过网址https://www.myapp.com/
访问的网络应用“api”容器托管另一个可通过网址https://api.myapp.com
访问的网络应用我无法从信息中心容器中对https://api.myapp.com进行cURL调用。我每次都收到超时错误。
可能存在路由问题或其他问题?
现在唯一可行的方法是使用“本地符号”http://air360-api:8082/对网址进行卷曲。
我正在使用多个DockerFile和docker run命令。
你能帮我解决这个问题吗?谢谢!PS:网址已伪造,请勿尝试调用它们: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”--link“dashboard-dev” --link“dashboard”--link“api”--link“media”--link“front”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"]
答案 0 :(得分:0)
您看到超时的原因可能来自某些防火墙规则(iptables)。解决方案是"不要这样做"从集装箱到外部地址/港口。只要容器内部和外部的端口匹配(例如,将容器中的端口80映射到主机上的80),就可以完全透明地对容器进行更改。
将容器放在同一个docker网络上,并使用docker网络来讨论容器到容器(而不是使用链接)。然后在网络上使用容器的别名来连接容器到容器,但使用外部地址。这是我从一个带有网络别名的traefik容器的例子,"代理"网络是使用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"将直接进入traefik容器。将traefik替换为您自己的apache容器和主机名,以将其应用于您的场景。