Docker容器和本地cURL调用

时间:2017-10-06 15:45:39

标签: curl docker dockerfile

我无法在同一台服务器上的两个docker容器之间进行cURL调用。

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

here

“信息中心”容器托管了一个可通过网址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"]

1 个答案:

答案 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容器和主机名,以将其应用于您的场景。