我正在尝试将Python应用程序停靠,我一直关注this tutorial。该教程从2015年4月开始,仍然使用Docker Machine,从this answer开始,不再需要在Windows上本地运行Docker容器。
之前我使用过Docker Machine,并且能够看到网络应用并与之互动。但是现在我试图在没有Docker Machine的情况下使用Docker版本17.06.0-ce,在Windows 10上构建02c1d87。
这是docker-compose.yml
:
web:
restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
volumes:
- /usr/src/app/static
env_file: .env
command: /usr/local/bin/gunicorn -w 2 -b :8000 app:app
nginx:
restart: always
build: ./nginx/
ports:
- "80:80"
volumes:
- /www/static
volumes_from:
- web
links:
- web:web
data:
image: postgres:latest
volumes:
- /var/lib/postgresql
command: "true"
postgres:
restart: always
image: postgres:latest
volumes_from:
- data
ports:
- "5432:5432"
我启动了容器:
$ docker-compose up -d
Creating polly_data_1 ...
Creating polly_data_1 ... done
Creating polly_postgres_1 ...
Creating polly_postgres_1 ... done
Creating polly_web_1 ...
Creating polly_web_1 ... done
Creating polly_nginx_1 ...
Creating polly_nginx_1 ... done
然后,当我运行docker ps
时,它显示以下三个容器正在运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b2c1048f3a5 polly_nginx "/usr/sbin/nginx" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp polly_nginx_1
d561ac5b901a polly_web "/usr/local/bin/gu..." 5 seconds ago Up 4 seconds 8000/tcp polly_web_1
ecb029d6ec3a postgres:latest "docker-entrypoint..." 7 seconds ago Up 5 seconds 0.0.0.0:5432->5432/tcp polly_postgres_1
(此时,导航到Chrome中的http://localhost:8000/
已经产生了ERR_CONNECTION_REFUSED
。)
然后根据教程(额外//
运行脚本来设置数据库,因为我在Windows 10上使用Git Bash):
$ docker-compose run web ///usr/local/bin/python create_db.py
Starting polly_data_1 ...
Starting polly_data_1 ... done
Starting polly_postgres_1 ... done
现在,当我运行docker ps
时,它会显示以下四个容器正在运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a129c12f5982 polly_web "//usr/local/bin/p..." 5 seconds ago Up Less than a second 8000/tcp polly_web_run_1
9b2c1048f3a5 polly_nginx "/usr/sbin/nginx" 16 seconds ago Up 15 seconds 0.0.0.0:80->80/tcp polly_nginx_1
d561ac5b901a polly_web "/usr/local/bin/gu..." 17 seconds ago Up 16 seconds 8000/tcp polly_web_1
ecb029d6ec3a postgres:latest "docker-entrypoint..." 19 seconds ago Up 17 seconds 0.0.0.0:5432->5432/tcp polly_postgres_1
localhost:8000
仍然拒绝连接。 Web容器暴露了端口8000,所以我不知道为什么我无法连接它。
如何让这个工作正常,以便我可以在本地访问web
容器中的网络应用程序?
答案 0 :(得分:1)
Web在容器内部公开端口8000
。但该端口未映射到主机端口。
我认为问题在于你的命令。该选项为-p
,而非-b
。
web:
restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
volumes:
- /usr/src/app/static
env_file: .env
command: /usr/local/bin/gunicorn -w 2 -p :8000 app:app
答案 1 :(得分:1)
答案 2 :(得分:0)
原来,正如Carlos和200_OK所建议的那样,他们的答案和评论的一部分,它按预期工作 - 它在端口80
运行,而不是8000
。