Не удается получить трафик в док-контейнер - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь запустить веб-сервер в Docker на http://localhost:5000, и все, что я прочитал, говорит о добавлении «EXPOSE 5000» в мой dockerfile и портах в мой файл docker-compose.

Я знаю, что веб-сервер работает, потому что я могу подключиться с помощью lynx внутри контейнера и перейти к http://localhost:5000. Внутри контейнера все работает нормально.

Когда я пытаюсь получить доступ к нему снаружи контейнера в хост-системе, я запускаю tcpdump и не вижу трафика, попадающего в контейнер.

докер-compose.yml:

version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - ./code:/code

Dockerfile:

FROM scratch
ADD centos-7-docker.tar.xz /

LABEL org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20180804"

RUN yum clean all
RUN yum -y update

RUN yum install -y iputils gcc vim wget yum-utils groupinstall development lynx

#install Python 3.6
RUN yum install https://centos7.iuscommunity.org/ius-release.rpm -y
RUN yum install python36u -y
RUN yum install python36u-pip python36u-devel -y
RUN pip3.6 install --upgrade pip
#now you can run python as "python3.6 some_file.py" and pip as "pip3.6 <stuff>"


#install ms sql odbc driver for connecting to SQL Server
RUN curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
RUN ACCEPT_EULA=Y yum install msodbcsql17 -y
# optional: for bcp and sqlcmd in /opt/mssql-tools/bin
RUN ACCEPT_EULA=Y yum install mssql-tools -y
# optional: for unixODBC development headers
RUN yum install unixODBC-devel -y

#install python's odbc driver
RUN yum install gcc-c++ -y
RUN pip3.6 install pyodbc

#mount volumes
ADD . /code
WORKDIR /code
EXPOSE 5000

#install Flask and other dependencies (must come after "/code" dir created)
RUN pip3.6 install -r /code/requirements.txt

#execute file
CMD python3.6 /code/app.py

app.py, который я пытаюсь запустить:

import time
#import redis
import pyodbc
from flask import Flask

app = Flask(__name__)
#cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    #count = get_hit_count()
    server = '123.123.123.123' #I changed these for posting to SO
    username = 'usernameForMyApplication'
    password = 'passwordForMyApplication'
    cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';PORT=1443;UID='+username+';PWD='+ password)
    cursor = cnxn.cursor()
    print ('Using the following SQL Server version:')
    tsql = "SELECT @@version;"
    with cursor.execute(tsql):
        row = cursor.fetchone()
        version = (str(row[0]))

    return 'version {} \n'.format(version)

if __name__ == "__main__":
    app.run(host="127.0.0.1", debug=True)

Как я могу получить доступ к веб-серверу снаружи контейнера хоста?

Я должен добавить, что пример (https://docs.docker.com/compose/gettingstarted/#step-2-create-a-dockerfile) работает на моем компьютере, поэтому я не думаю, что это проблема конфигурации с моим хостом Windows 10.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

попробуйте изменить свой IP-адрес

if __name__ == "__main__":
    app.run(host="0.0.0.0", port="5000", debug=True)
0 голосов
/ 14 сентября 2018

Вы привязываете ваш флеш-сервер к локальному узлу внутри контейнера. Измените 127.0.0.1 на 0.0.0.0, и это должно исправить ситуацию.

...