Docker Ошибка - CommandError: «0.0.0.0:» не является допустимым номером порта или адресом: пара портов - PullRequest
2 голосов
/ 22 января 2020

Итак, у меня есть файл docker, который я собираюсь собрать и выложить sh в Google Cloud Run, и он выглядит следующим образом:

# pull official base image
FROM python:3.7-slim

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt

# copy project
COPY . /usr/src/app/

CMD python manage.py runserver 0.0.0.0:$PORT

Идея состоит в том, что однажды я пу sh это в Cloud Run, мой Django проект будет работать в 0.0.0.0:$PORT, где значение переменной среды $ PORT устанавливается Google Cloud Run автоматически.

Я пытался запустить контейнер следующего изображения локально, чтобы увидеть, если это работает. Я устанавливаю $ PORT на 80, а затем, когда запускаю контейнер с изображением docker, я получаю следующее:

"CommandError: "0.0.0.0:" is not a valid port number or address:port pair."

Просмотр других ответов, таких как this .

Я понимаю, что 0.0.0.0 является местозаполнителем для IP-адреса publi c данного компьютера. Мой вопрос: почему я не получаю «CommandError», когда я запускаю docker run [DockerImage] локально ??

Если есть какие-либо другие вопросы, пожалуйста, дайте мне знать, я проясню это.

Редактировать: я также хочу отметить, что я следую этому учебнику

Ответы [ 2 ]

7 голосов
/ 22 января 2020

Установка переменной среды на хост-компьютере не устанавливает ее в контейнере.

Команда python manage.py runserver 0.0.0.0:$PORT выполняется внутри контейнера, где $PORT не установлена, поэтому она расширяется до python manage.py runserver 0.0.0.0:.

Попробуйте docker run -e PORT=$PORT <your_image> передать значение переменной env PORT внутри контейнера со значением из хост-машины.

5 голосов
/ 22 января 2020

Вы не установили переменную PORT env в Dockerfile, и по этой причине ее невозможно разрешить $PORT во время выполнения CMD.

вы можете обновить свой Dockerfile следующим образом (я использовал 8080 например, обновите это до требуемого порта):

# pull official base image
FROM python:3.7-slim

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV PORT 8080

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt

# copy project
COPY . /usr/src/app/

CMD python manage.py runserver 0.0.0.0:$PORT

Надеюсь, это поможет

...