我是Docker
的新用户并使用Django
Docker
应用程序
我的申请路径如下
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上编程外部连接 (8ea5c084a7283a16afbf136a73dc4b27d9cae35fe14d735b83199ad5d0e03431): 绑定0.0.0.0:9010失败:端口已分配
我已经按照一些教程来创建这些Docker文件和nginx conf文件。
1。我该如何解决上述问题
2.我是否需要在上述配置中使用FROM ubuntu:18.04
?
编辑2
答案 0 :(得分:1)
您无法为这两项服务分配主机的端口9010。
这就是您在服务声明nginx和Web的#include <test.h>
int main(int argc, char** argv)
{
print(); // undefined reference to `print()'
A a;
a.print(); // undefined reference to `A::print() const'
return 0;
}
部分中所做的事情。
此外,默认情况下,nginx将侦听端口80和443以获取https。
您可以保持这样并发布到主机上的其他端口。了解如何在docker-compose中使用ports
关键字:
https://docs.docker.com/compose/compose-file/#ports
也许你想要更像这样的东西:
port
config / nginx / nginx.conf的内容
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
关于你的上一个问题,你可以从Docker hub Python repository获取官方Python图像,或从任何其他基本图像开始,如debian:来自Debian official repository的jessie-slim或保留Ubuntu 18.04图像
答案 1 :(得分:0)
杀死所有 nginx 进程。
sudo killall nginx
然后
docker-compose up --build