Контейнер / образ Docker запущен, но номер порта отсутствует - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь получить созданный мной проект 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 голосов
/ 02 мая 2018

Эта строка из вопроса помогает выявить проблему;

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 перестает работать, когда основной процесс завершается по любой причине.

Вам необходимо просмотреть журналы, чтобы определить причину.

docker logs 01cc покажет журналы док-контейнера, идентификатор которого начинается с 01cc. Вы должны найти, что их чтение поможет вам на вашем пути. Знание этой команды очень поможет вам в отладке странностей в докере, независимо от того, запущен контейнер или остановлен.

Альтернативный «быстрый» способ - сбросить -d в вашей команде запуска. Это заставит ваш контейнер работать как встроенный, а не как демон.

0 голосов
/ 02 мая 2018

Создан проект Dockerise django seed

django-admin.py startproject djangoapp

Требуется файл require.txt с описанием зависимостей Python

cd djangoapp/

Команда RUN follwoing для создания файлов, необходимых для докеризации

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
0 голосов
/ 02 мая 2018

Когда вы создали контейнер, вы опубликовали порты. Ваш контейнер будет доступен через порт 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

У меня возникли похожие проблемы с первыми экземплярами докера, которые я тоже пытался запустить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...