Отправка http-запросов из Docker-контейнера с использованием той же сети, что и отправка запросов с хост-компьютера. - PullRequest
0 голосов
/ 28 августа 2018

Моя заявка dockerized. Его python/django приложение. Мы используем локальный API для отправки смс, который ограничен на основе IP. Поэтому я дал им мой EC2 IP-адрес. И я запускаю свой док-контейнер на этой EC2 машине. Но мое приложение на Python не может отправлять запросы на этот компьютер. Потому что этот док-контейнер имеет разные IP.

Как мне решить эту проблему?

Dockerfile

# ToDo use alpine image
FROM python:3.6
# Build Arguments with defaults
ARG envior
ARG build_date
ARG build_version
ARG maintainer_name='Name'
ARG maintainaer_email='email@email.com'
# Adding Labels
LABEL com.example.service="Service Name" \
      com.example.maintainer.name="$maintainer_name" \
      com.example.maintainer.email="$maintainaer_email" \
      com.example.build.enviornment="$envior" \
      com.example.build.version="$build_version" \
      com.example.build.release-date="$build_date"
# Create app directory
RUN mkdir -p /home/example/app
# Install Libre Office for pdf conversion
RUN apt-get update -qq \
    && apt-get install -y -q libreoffice \
    && apt-get remove -q -y libreoffice-gnome
# Cleanup after apt-get commands
RUN apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
    /var/cache/apt/archives/*.deb /var/cache/apt/*cache.bin
# Activate WORKING DIR
WORKDIR /home/example/app
# Copying requirements
COPY requirements/${envior}.txt /tmp/requirements.txt
# Install the app dependencies
# ToDo Refactor requirements
RUN pip install -r /tmp/requirements.txt
# Envs
ENV DJANGO_SETTINGS_MODULE app.settings.${envior}
ENV ENVIORNMENT ${envior}
# ADD the source code and entry point into the container
ADD . /home/example/app
ADD entrypoint.sh /home/example/app/entrypoint.sh
# Making entry point executable
RUN chmod +x entrypoint.sh
# Exposing port
EXPOSE 8000
# Entry point and CMD
ENTRYPOINT ["/home/example/app/entrypoint.sh"]

докер-compose.yml

version: '3'
services:
  postgres:
    image: onjin/alpine-postgres:9.5
    restart: unless-stopped
    ports:
      - "5432:5432"
    environment:
      LC_ALL: C.UTF-8
      POSTGRES_USER: django
      POSTGRES_PASSWORD: django
      POSTGRES_DB: web
    volumes:
      - postgres_data:/var/lib/postgresql/data/

  web:
    build:
      context: .
      args:
        environ: local
    command: gunicorn app.wsgi:application -b 0.0.0.0:8000
    ports:
      - "8000:8000"
    depends_on:
      - postgres
    environment:
      DATABASE_URL: 'postgres://django:django@postgres/web'
      DJANGO_MANAGEPY_MIGRATE: 'on'
      DJANGO_MANAGEPY_COLLECTSTATIC: 'on'
      DJANGO_LOADDATA: 'off'
      DOMAIN: '0.0.0.0'

volumes:
   postgres_data:

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы должны попытаться поместить контейнер в ту же сеть, что и ваш экземпляр EC2. Это означает использование сетей с драйвером host.

предлагается docker-compose file

version: '3'
services:
  postgres:
    [...]
    networks:
      - host
    volumes:
      - postgres_data:/var/lib/postgresql/data/

  web:
    [...]
    networks:
      - host

volumes:
   postgres_data:

networks:
  host:

Если это не сработает, вы можете определить свою собственную сеть следующим образом:

networks:
  appnet:
    driver: host

и подключитесь к этой сети, сформируйте службы:

postgres:
    [..]  
    networks:
      - appnet

Дополнительная информация о сетях Официальная ссылка . Интересное чтение тоже из официального сетевого учебника .

0 голосов
/ 28 августа 2018

Опубликовать порт из контейнера Docker на базовую машину, затем настроить ec2IP: порт в приложении sms.

...