【发布时间】:2019-10-31 00:57:16
【问题描述】:
总结
尽管docker build 成功构建了容器镜像,docker run 似乎没有构建容器(但它也不会抛出错误)。
输入输出
1. docker 镜像创建成功..
$ docker build -t minitwitter:latest .
...
Successfully built da191988e0db
Successfully tagged minitwitter:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
minitwitter latest da191988e0db 6 seconds ago 173MB
python 3.7-alpine b11d2a09763f 9 days ago 98.8MB
2. ..和 docker run 完成没有错误..
$ docker run --name minitwitter -d -p 8000:5000 --rm minitwitter:latest
e8835f1b4c72c8e1a8736589c74d56ee2d12ec7bcfb4695531759fb1c2cf0e48
3. ..但是 docker 容器似乎不存在。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
导航到应用程序应该暴露的端口http://localhost:8000,返回连接错误ERR_CONNECTION_REFUSED。
Docker 文件,boot.sh
我认为 Dockerfile 和 boot.sh 文件非常简单:
Dockerfile
FROM python:3.7-alpine
RUN adduser -D minitwitter
WORKDIR /home/minitwitter
COPY requirements.txt requirements.txt
RUN python -m venv env
RUN env/bin/pip install -r requirements.txt
RUN env/bin/pip install gunicorn
COPY app app
COPY migrations migrations
COPY minitwitter.py config.py boot.sh ./
RUN chmod a+x boot.sh
ENV FLASK_APP minitwitter.py
RUN chown -R minitwitter:minitwitter ./
USER minitwitter
EXPOSE 5000
ENTRYPOINT ["./boot.sh"]
boot.sh
# BOOTS A DOCKER CONTAINER
#!/bin/sh
source env/bin/activate
flask db upgrade
exec gunicorn -b :5000 --access-logfile - --error-logfile - minitwitter:app
【问题讨论】:
-
您可能想尝试运行它
docker run --interactive --tty ....而不是分离以更轻松地查看日志和任何异常。或者,docker container ls --all也应该显示退出的容器。然后你可以docker container logs [CONTAINER-ID]看看发生了什么。 -
通常我会在创建 virtualenv 之后
source /env/bin/activate和 beforepip --requirements等。你能不能把大部分boot.sh折叠到你的Dockerfile中并拥有ENTRYPOINT ["gunicorn","-b",":5000",....] -
@DazWilkin
docker container ls --all没有显示容器。这向我表明,根本没有创建容器。你同意?考虑到这个额外的事实,你有什么建议? -
正确。似乎没有(正确)创建容器。
-
嗯....尽管您也有
docker run ... --rm ...删除已完成的容器。也放下它。
标签: python-3.x docker dockerfile containers boot