我正在尝试获取一个django项目,我已经构建了在docker上运行并为我的项目创建一个图像和容器,以便我可以将它推送到我的dockerhub配置文件。
现在我已经完成了所有设置,并且我已经创建了项目的初始图像。但是,当我运行它时,我没有获得任何附加到容器的端口号。我需要这个测试,看看容器是否真的有效。
这就是我所拥有的:
Successfully built a047506ef54b
Successfully tagged test_1:latest
(MySplit) omars-mbp:mysplit omarjandali$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test_1 latest a047506ef54b 14 seconds ago 810MB
(MySplit) omars-mbp:mysplit omarjandali$ docker run --name testing_first -d -p 8000:80 test_1
01cc8173abfae1b11fc165be3d900ee0efd380dadd686c6b1cf4ea5363d269fb
(MySplit) omars-mbp:mysplit omarjandali$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
01cc8173abfa test_1 "python manage.py ru…" 13 seconds ago Exited (1) 11 seconds ago testing_first
(MySplit) omars-mbp:mysplit omarjandali$ Successfully built a047506ef54b
您可以看到没有端口号,因此我不知道如何通过我的网络浏览器上的本地计算机访问容器。
dockerfile:
FROM python:3
WORKDIR tab/
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "manage.py", "runserver", "0.0.0.0"]
答案 0 :(得分:1)
该问题的这一行有助于揭示问题;
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
01cc8173abfa test_1 "python manage.py ru…" 13 seconds ago Exited (1) 11 seconds ago testing_first
Exited (1)
(来自STATUS列)表示主进程已退出,状态代码为1 - 通常表示错误。这将释放端口,因为当主进程因任何原因完成时,docker容器停止运行。
You need to view the logs in order to diagnose why.
docker logs 01cc
将显示具有以01cc
开头的ID的泊坞窗容器的日志。你会发现阅读这些内容对你有所帮助。知道这个命令将极大地帮助你调试docker中的怪异,无论容器是在运行还是停止。
替代'快速'方法是在运行命令中删除-d
。这将使您的容器内联而不是守护进程。
答案 1 :(得分:0)
创建容器时,您发布了端口。如果成功构建,您的容器可通过端口8000访问。但是,正如Shadow指出的那样,您的容器退出并出现错误。这就是您必须将-a
标志添加到docker container ls
命令的原因。 docker container ls
仅显示没有-a
标记的正在运行的容器。
我建议放弃分离标记-d
以查看导致错误的原因。然后在成功启动正在处理的容器后创建新容器。或者只需在修复问题后运行以下命令即可。 docker stop testing_first
然后docker container rm testing_first
最终运行您之前运行的相同命令。 docker run --name testing_first -d -p 8000:80 test_1
我遇到了与我试图运行的第一个docker实例类似的问题。
答案 2 :(得分:0)
django-admin.py startproject djangoapp
cd djangoapp/
cat <<EOF > requirements.txt
Django
psycopg2
EOF
cat <<EOF > Dockerfile
FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /app
ADD requirements.txt /app/
RUN pip install -r requirements.txt
ADD . /app/
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
EOF
cat <<EOF > docker-compose.yml
version: "3.2"
services:
web:
image: djangoapp
command: python manage.py runserver 0.0.0.0:8000
ports:
- "8000:8000"
EOF
docker-compose up -d