Docker - медленные условия сети - PullRequest
0 голосов
/ 08 января 2020

У меня есть docker -компонентная установка с несколькими службами, например:

version: '3.6'

services:

  web:
    build:
      context: ./services/web
      dockerfile: Dockerfile-dev
    volumes:
      - './services/web:/usr/src/app'

    ports:
      - 5001:5000
    environment:
      - FLASK_ENV=development
      - APP_SETTINGS=project.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@web-db:5432/web_dev 
      - DATABASE_TEST_URL=postgres://postgres:postgres@web-db:5432/web_test
      - SECRET_KEY=my_precious
    depends_on:  
      - web-db
      - redis


  web-db:  
    build:
      context: ./services/web/projct/db
      dockerfile: Dockerfile
    ports:
      - 5435:5432
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres


  nginx:
    build:
      context: ./services/nginx
      dockerfile: Dockerfile-dev
    restart: always
    ports:
      - 80:80
    depends_on:
      - web
      - client
      #- redis


  client:
    build:
      context: ./services/client
      dockerfile: Dockerfile-dev
    volumes:
      - './services/client:/usr/src/app'
      - '/usr/src/app/node_modules'
    ports:
      - 3000:3000
    environment:
      - NODE_ENV=development
      - REACT_APP_WEB_SERVICE_URL=${REACT_APP_WEB_SERVICE_URL}
    depends_on:
      - web


  swagger:
    build:
      context: ./services/swagger
      dockerfile: Dockerfile-dev
    volumes:
    - './services/swagger/swagger.json:/usr/share/nginx/html/swagger.json'
    ports:
      - 3008:8080
    environment:
    - URL=swagger.json
    depends_on:
      - web


  scrapyrt:
    image: vimagick/scrapyd:py3
    restart: always
    ports:
      - '9080:9080'
    volumes:
      - ./services/web:/usr/src/app
    working_dir: /usr/src/app/project/api
    entrypoint: /usr/src/app/entrypoint-scrapyrt.sh
    depends_on:
      - web


  redis:
    image: redis:5.0.3-alpine
    restart: always
    expose:
      - '6379'
    ports:
      - '6379:6379'


  monitor:
    image: dev3_web
    ports:
      - 5555:5555
    command:  flower -A celery_worker.celery --port=5555 --broker=redis://redis:6379/0
    depends_on:
      - web
      - redis


  worker-analysis:
    image: dev3_web
    restart: always
    volumes:
      - ./services/web:/usr/src/app
      - ./services/web/celery_logs:/usr/src/app/celery_logs

    command: celery worker -A celery_worker.celery --loglevel=DEBUG --logfile=celery_logs/worker_analysis.log -Q analysis
    environment:
      - CELERY_BROKER=redis://redis:6379/0
      - CELERY_RESULT_BACKEND=redis://redis:6379/0
      - FLASK_ENV=development
      - APP_SETTINGS=project.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@web-db:5432/web_dev 
      - DATABASE_TEST_URL=postgres://postgres:postgres@web-db:5432/web_test
      - SECRET_KEY=my_precious  
    depends_on:
      - web
      - redis
      - web-db
    links:
      - redis:redis
      - web-db:web-db


  worker-scraping:
    image: dev3_web
    restart: always
    volumes:
      - ./services/web:/usr/src/app
      - ./services/web/celery_logs:/usr/src/app/celery_logs

    command: celery worker -A celery_worker.celery --loglevel=DEBUG --logfile=celery_logs/worker_scraping.log -Q scraping
    environment:
      - CELERY_BROKER=redis://redis:6379/0
      - CELERY_RESULT_BACKEND=redis://redis:6379/0
      - FLASK_ENV=development
      - APP_SETTINGS=project.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@web-db:5432/web_dev 
      - DATABASE_TEST_URL=postgres://postgres:postgres@web-db:5432/web_test
      - SECRET_KEY=my_precious  
    depends_on:
      - web
      - redis
      - web-db
    links:
      - redis:redis
      - web-db:web-db


  worker-emailing:
    image: dev3_web
    restart: always
    volumes:
      - ./services/web:/usr/src/app
      - ./services/web/celery_logs:/usr/src/app/celery_logs

    command: celery worker -A celery_worker.celery --loglevel=DEBUG --logfile=celery_logs/worker_emailing.log -Q email
    environment:
      - CELERY_BROKER=redis://redis:6379/0
      - CELERY_RESULT_BACKEND=redis://redis:6379/0
      - FLASK_ENV=development
      - APP_SETTINGS=project.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@web-db:5432/web_dev 
      - DATABASE_TEST_URL=postgres://postgres:postgres@web-db:5432/web_test
      - SECRET_KEY=my_precious
    depends_on:
      - web
      - redis
      - web-db
    links:
      - redis:redis
      - web-db:web-db


  worker-learning:
    image: dev3_web
    restart: always
    volumes:
      - ./services/web:/usr/src/app
      - ./services/web/celery_logs:/usr/src/app/celery_logs

    command: celery worker -A celery_worker.celery --loglevel=DEBUG --logfile=celery_logs/worker_ml.log -Q machine_learning
    environment:
      - CELERY_BROKER=redis://redis:6379/0
      - CELERY_RESULT_BACKEND=redis://redis:6379/0
      - FLASK_ENV=development
      - APP_SETTINGS=project.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@web-db:5432/web_dev 
      - DATABASE_TEST_URL=postgres://postgres:postgres@web-db:5432/web_test
      - SECRET_KEY=my_precious  
    depends_on:
      - web
      - redis
      - web-db
    links:
      - redis:redis
      - web-db:web-db


  worker-periodic:
    image: dev3_web
    restart: always
    volumes:
      - ./services/web:/usr/src/app
      - ./services/web/celery_logs:/usr/src/app/celery_logs

    command: celery beat -A celery_worker.celery --schedule=/tmp/celerybeat-schedule --loglevel=DEBUG --pidfile=/tmp/celerybeat.pid
    environment:
      - CELERY_BROKER=redis://redis:6379/0
      - CELERY_RESULT_BACKEND=redis://redis:6379/0
      - FLASK_ENV=development
      - APP_SETTINGS=project.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@web-db:5432/web_dev 
      - DATABASE_TEST_URL=postgres://postgres:postgres@web-db:5432/web_test
      - SECRET_KEY=my_precious  
    depends_on:
      - web
      - redis
      - web-db
    links:
      - redis:redis
      - web-db:web-db

docker-compose -f docker-compose-dev.yml up -d и docker ps дают мне:

CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                              NAMES
396d7a1a5443        dev3_nginx             "nginx -g 'daemon of…"   23 hours ago        Up 18 minutes       0.0.0.0:80->80/tcp                 dev3_nginx_1
8ec7a51e2c2a        dev3_web               "celery worker -A ce…"   24 hours ago        Up 19 minutes                                          dev3_worker-analysis_1
e591e6445c64        dev3_web               "celery worker -A ce…"   24 hours ago        Up 19 minutes                                          dev3_worker-learning_1
4d1fd17be3cb        dev3_web               "celery worker -A ce…"   24 hours ago        Up 19 minutes                                          dev3_worker-scraping_1
d25c40060fed        dev3_web               "celery beat -A cele…"   24 hours ago        Up 17 seconds                                          dev3_worker-periodic_1
76df1a600afa        dev3_web               "celery worker -A ce…"   24 hours ago        Up 18 minutes                                          dev3_worker-emailing_1
3442b0ce5d56        vimagick/scrapyd:py3   "/usr/src/app/entryp…"   24 hours ago        Up 20 minutes       6800/tcp, 0.0.0.0:9080->9080/tcp   dev3_scrapyrt_1
81d3ccea4de4        dev3_client            "npm start"              24 hours ago        Up 19 minutes       0.0.0.0:3000->3000/tcp             dev3_client_1
aff5ecf951d2        dev3_web               "flower -A celery_wo…"   24 hours ago        Up 10 seconds       0.0.0.0:5555->5555/tcp             dev3_monitor_1
864f17f39d54        dev3_swagger           "/start.sh"              24 hours ago        Up 19 minutes       80/tcp, 0.0.0.0:3008->8080/tcp     dev3_swagger_1
e69476843236        dev3_web               "/usr/src/app/entryp…"   24 hours ago        Up 19 minutes       0.0.0.0:5001->5000/tcp             dev3_web_1
22fd91b1ab6e        redis:5.0.3-alpine     "docker-entrypoint.s…"   24 hours ago        Up 20 minutes       0.0.0.0:6379->6379/tcp             dev3_redis_1
3a0b2115dd8e        dev3_web-db            "docker-entrypoint.s…"   24 hours ago        Up 19 minutes       0.0.0.0:5435->5432/tcp             dev3_web-db_1

Они все работают, но я сталкиваюсь с чрезвычайно медленными сетевыми условиями с большой нестабильностью. Я пытался проверить связь между контейнерами и уловить возможную задержку, например, так:

docker container exec -it e69476843236 ping aff5ecf951d2
PING aff5ecf951d2 (172.18.0.13): 56 data bytes
64 bytes from 172.18.0.13: seq=0 ttl=64 time=0.504 ms
64 bytes from 172.18.0.13: seq=1 ttl=64 time=0.254 ms
64 bytes from 172.18.0.13: seq=2 ttl=64 time=0.191 ms
64 bytes from 172.18.0.13: seq=3 ttl=64 time=0.168 ms

, но в этих тестах время кажется нормальным, хотя время от времени я получаю ping: bad address 'aff5ecf951d2', когда какая-то служба отключается.

Иногда я получаю эту ошибку:

ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60).

И слишком часто мне просто нужно перезапустить Docker, чтобы заставить его работать.


Как можно Я docker проверяю глубже в медленных условиях сети и выясняю, что не так? Могут ли проблемы с новым заданием быть связаны с объемами?

1 Ответ

0 голосов
/ 17 января 2020

Проблема проявилась в том, что количество контейнеров и сложность приложения выросли (как вы всегда должны знать).

В моем случае я изменил одно из изображений с Alpine на Slim -Buster (Debian), который значительно больше.

Оказывается, я мог бы это исправить, просто перейдя к Docker 'Предпочтения':

enter image description here

нажмите «Дополнительно» и увеличьте выделение памяти.

enter image description here

Теперь он снова работает гладко.

...