Leo*_*eel 2 docker dockerfile docker-compose
我正在尝试 dockerize 一个 Python 应用程序,为此我一直在关注本教程。本教程从 2015 年 4 月开始,仍然使用 Docker Machine,从这个答案来看,不再需要在 Windows 上本地运行 Docker 容器。
我之前在 Docker Machine 上使用过它,并且能够看到 Web 应用程序并与之交互。但是现在我正在尝试在没有 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"
Run Code Online (Sandbox Code Playgroud)
我启动了容器:
$ 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
Run Code Online (Sandbox Code Playgroud)
然后,当我运行时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
Run Code Online (Sandbox Code Playgroud)
(此时,http://localhost:8000/在 Chrome 中导航到已经产生了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
Run Code Online (Sandbox Code Playgroud)
现在,当我运行时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
Run Code Online (Sandbox Code Playgroud)
并且localhost:8000仍然拒绝连接。Web 容器公开端口 8000,所以我不明白为什么我无法连接到它。
我怎样才能让它工作,以便我可以在web本地访问容器中的 Web 应用程序?
只是改变:
expose:
- "8000"
Run Code Online (Sandbox Code Playgroud)
经过
ports:
- "8000:8000"
Run Code Online (Sandbox Code Playgroud)
顺便说一句http://localhost:80不工作?
问候
8000Web在容器内部公开端口。但该端口未映射到您的主机端口。
我认为问题出在你的指挥上。选项是-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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11265 次 |
| 最近记录: |