Docker容器/映像正在运行但没有端口号

时间:2018-05-02 02:59:59

标签: python docker dockerfile

我正在尝试获取一个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"]

3 个答案:

答案 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)

创建了Dockerise django种子项目

django-admin.py startproject djangoapp

需要一个概述Python依赖关系的requirements.txt文件

cd djangoapp/

运行以下命令以创建dockerization所需的文件

cat <<EOF > requirements.txt
Django
psycopg2
EOF

Dockerfile

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

搬运工-compose.yml

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