web-dev-qa-db-ja.com

Docker-Djangoサーバーにアクセスできません

コンテナのポートを介してDjangoに接続できません。このアドレスを使用しています:0.0.0.0.:8000、次を参照してください http://joxi.ru/ Dr8MeGLhkBWnLm 。「docker-compose up -d」という1つのコマンドでイメージとコンテナーを作成しています。

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
4fea50856eef        docker_web          "python manage.py ru…"   13 seconds ago      Up 11 seconds       0.0.0.0:8000->8000/tcp   docker_web_1

docker-compose.yaml

version: '3'

services:
  web:
    build:
      context: .
      dockerfile: /Django.testsite/Dockerfile
    ports:
      - "8000:8000"

Dockerfile

FROM python:3

RUN easy_install pip
RUN pip install Django==1.9.12
RUN pip install requests

ADD . /.
WORKDIR /Django.testsite

CMD ["python", "manage.py", "runserver", "8000"]

この問題を解決するにはどうすればよいですか?

8
S. Dior

あなたの問題:

CMD ["python", "manage.py", "runserver", "8000"]

これを機能させるには、次のように変更する必要があります。

CMD ["python", "manage.py", "runserver", "0.0.0.0", "8000"]

最後に、ブラウザで http://127.0.0.1:8000/ を使用します。

どうして?まあ、Pythonは実際にはeth0アドレスが必要なときに127.0.0.1で公開していると考えています。これは変更できるため、ハードコーディングしたくないので0.0を使用します。 .0.0は「すべて」のインターフェースを意味します。

Docker 127.0.0.1を思い出してくださいISホスト127.0.0.1ではなく、各dockerコンテナーには独自のループバックがあります。


完全に機能させるには:

docker-compose down
docker rmi docker_web
docker-compose up -d

または..(これは構文であることが80%だと思います)

docker-compose down
docker-compose up -d --rebuild

本当に連携しない場合は、docker ps -aを参照して、何も実行されていないことを確認してください。 (ps。docker rm <id>を使用してそれを取り除くことができます。追加のクレジット:docker ps -aq | xargs docker rmがすべてを実行します;))

補足:0.0.0.0を書きたくない場合は、0と書くだけで同じことができます。

15
Javier Buzzi