代码之家  ›  专栏  ›  技术社区  ›  Anuj TBE

Docker错误:对于nginx无法启动服务nginx:驱动程序无法在上编程外部连接

  •  1
  • Anuj TBE  · 技术社区  · 7 年前

    我是新来的 Docker 建立我的第一个 Django 应用程序使用 码头工人

    我的应用程序路径看起来像

    app
     |- helloworld
        |- __init__.py
        |- manage.py
     |- static_cdn
        |- static_root
     |- config
        |- nginx
           |- nginx.conf
     |- Dockerfile
     |- docker-compose.yml
     |- requirements.txt
     |- start.sh
    

    的内容 Docerfile

    FROM ubuntu:18.04
    
    # -- Install Pipenv:
    FROM python:3
    ENV PYTHONUNBUFFERED 1
    
    ENV LC_ALL C.UTF-8
    ENV LANG C.UTF-8
    
    # -- Install Application into container:
    RUN set -ex && mkdir /app
    
    WORKDIR /app
    ADD requirements.txt /app/
    
    RUN pip install -r requirements.txt
    
    # -- Adding dependencies:
    ADD . /app/
    

    内容 docker-compose.yml

    version: '3'
    
    services:
      nginx:
        image: nginx:latest
        ports:
          - "9010:9010"
        volumes:
          - .:/app
          - ./config/nginx:/etc/nginx/conf.d
          - ./static_cdn:/static
        depends_on:
          - web
      web:
        build: .
        command: ./start.sh
        volumes:
          - .:/app
          - ./static_cdn:/static
        ports:
          - "9010:9010"
        depends_on:
          - db
        expose:
          - "9010"
      db:
        image: postgres
    

    内容 config/nginx/nginx.conf

    upstream web {
        ip_hash;
        server web:9010;
    }
    
    server {
        location /static {
            autoindex on;
            alias /static/
        }
    
        location / {
            proxy_pass http://127.0.0.1;
        }
        listen 9011;
        server_name localhost;
    }
    

    内容 start.sh

    #!/usr/bin/env bash
    
    # Start Gunicorn processes
    echo --: Starting application build
    echo --: Creating migration
    exec python3 manage.py makemigrations
    echo ------: makemigrations complete
    echo --: Running migration
    exec python3 manage.py migrate
    echo ------: migrate complete
    echo --: Running collectstatic
    exec python3 manage.py collectstatic
    echo ------: collectstatic complete
    echo Starting Gunicorn.
    exec gunicorn helloworld.wsgi:application \
        --bind 0.0.0.0:9010 \
        --workers 3
    

    现在,当我使用Docker构建

    docker-compose up --build
    

    它给出的错误是

    错误:对于nginx无法启动服务nginx:驱动程序失败 在端点koober_nginx_1上编程外部连接 (8ea5c084a7283a16aff136a73dc4b27d9cae35fe14d735b83199ad5d0e03431): 绑定0.0.0.0:9010失败:端口已分配

    我已经遵循了一些教程来创建这些docker文件和nginx conf文件。

    1。我怎样才能解决上述问题。
    2。我需要用 FROM ubuntu:18.04 采用上述配置?

    编辑2

    现在,它在创建从 开始.sh 命令 enter image description here

    1 回复  |  直到 7 年前
        1
  •  1
  •   gcharbon    7 年前

    不能为这两个服务分配主机的端口9010。 这就是你在做的 ports 服务nginx和web的声明部分。

    此外,默认情况下,nginx将监听端口80和443的https。

    您可以这样保存它并将其发布到主机上的其他端口。了解如何使用 port docker compose中的关键字:

    https://docs.docker.com/compose/compose-file/#ports

    也许你想要这样的东西:

    version: '3'
    
    services:
      nginx:
        image: nginx:latest
        ports:
          - "10080:80"
          - "10443:443"
        volumes:
          - .:/app
          - ./config/nginx:/etc/nginx/conf.d
          - ./static_cdn:/static
       depends_on:
          - web
    
      web:
        build: .
        command: ./start.sh
        container_name: "web-app"
        volumes:
          - .:/app
          - ./static_cdn:/static
        expose:
          - "9010"
        depends_on:
          - db
    
      db: 
        image: postgres
    

    config/nginx/nginx.conf目录

    upstream web {
      ip_hash;
      server web-app:9010;
    }
    
    server {
        location /static {
            autoindex on;
            alias /static/
         }
    
    location / {
        proxy_pass http://web;
    }
    
    listen 80;
    server_name localhost;
    }
    

    关于最后一个问题,您可以从 Docker hub Python repository 或者从任何其他的基础图像开始,比如Debian:Jessie Slim from Debian official repository 或者保留ubuntu 18.04图像