Winodows 1p Pro (64bit)
Vagrant 2.2.14
Ubuntu 18.04
Python 3.7.3
Windows上でDnagoを勉強していたのですが、Dockerの勉強も含めてDnagoを勉強するため、
DockerでDjangoの開発環境を構築しています。
docker-compose -f docker-compose.prod.yml up -d --buildを実行すると。DockFileが起動するのですが、
最後のインストール後に以下のエラーが表示されます。
Sending build context to Docker daemon 158.2kB Step 1/11 : FROM python:3.7-alpine ---> b9aa0352c160 Step 2/11 : WORKDIR /usr/src/app ---> Using cache ---> 3148844adc85 Step 3/11 : ENV PYTHONDONTWRITEBYTECODE 1 ---> Using cache ---> e35901e562a7 Step 4/11 : ENV PYTHONUNBUFFERED 1 ---> Using cache ---> 7b51339f93d1 Step 5/11 : RUN apk update && apk add --virtual build-deps gcc python3-dev musl-dev && apk add postgresql-dev && pip install psycopg2 && apk del build-deps ---> Using cache ---> b6dccc7758d5 Step 6/11 : RUN pip install --upgrade pip && pip install pipenv ---> Using cache ---> 7d2ae02b192d Step 7/11 : COPY ./Pipfile /usr/src/app/Pipfile ---> Using cache ---> f4acea8362d0 Step 8/11 : RUN pipenv install --skip-lock --system --dev ---> Running in efff9a042164 Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/pipenv/project.py", line 573, in _parse_pipfile return tomlkit.parse(contents) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/tomlkit/api.py", line 49, in parse return Parser(string).parse() File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/tomlkit/parser.py", line 153, in parse key, value = self._parse_table() File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/tomlkit/parser.py", line 1152, in _parse_table table.raw_append(_key, item) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/tomlkit/items.py", line 943, in raw_append self._value.append(key, _item) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/tomlkit/container.py", line 179, in append raise KeyAlreadyPresent(key) tomlkit.exceptions.KeyAlreadyPresent: Key "name " already exists. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/toml/decoder.py", line 512, in loads multibackslash) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/toml/decoder.py", line 781, in load_line raise ValueError("Duplicate keys!") ValueError: Duplicate keys! During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/bin/pipenv", line 8, in <module> sys.exit(cli()) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 829, in __call__ return self.main(*args, **kwargs) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 782, in main rv = self.invoke(ctx) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 1259, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 1066, in invoke return ctx.invoke(self.callback, **ctx.params) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/decorators.py", line 73, in new_func return ctx.invoke(f, obj, *args, **kwargs) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/click/decorators.py", line 21, in new_func return f(get_current_context(), *args, **kwargs) File "/usr/local/lib/python3.7/site-packages/pipenv/cli/command.py", line 253, in install site_packages=state.site_packages File "/usr/local/lib/python3.7/site-packages/pipenv/core.py", line 1938, in do_install pre = project.settings.get("allow_prereleases") File "/usr/local/lib/python3.7/site-packages/pipenv/project.py", line 607, in settings return self.parsed_pipfile.get("pipenv", {}) File "/usr/local/lib/python3.7/site-packages/pipenv/project.py", line 550, in parsed_pipfile parsed = self._parse_pipfile(contents) File "/usr/local/lib/python3.7/site-packages/pipenv/project.py", line 577, in _parse_pipfile return toml.loads(contents) File "/usr/local/lib/python3.7/site-packages/pipenv/vendor/toml/decoder.py", line 514, in loads raise TomlDecodeError(str(err), original, pos) toml.decoder.TomlDecodeError: Duplicate keys! (line 5 column 1 char 75) The command '/bin/sh -c pipenv install --skip-lock --system --dev' returned a non-zero code: 1 ERROR: Service 'django' failed to build
Dockerfie
FROM python:3.7-alpine WORKDIR /usr/src/app ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 RUN apk update \ && apk add --virtual build-deps gcc python3-dev musl-dev \ && apk add postgresql-dev \ && pip install psycopg2 \ && apk del build-deps RUN pip install --upgrade pip \ && pip install pipenv COPY ./Pipfile /usr/src/app/Pipfile RUN pipenv install --skip-lock --system --dev COPY ./entrypoint.prod.sh /usr/src/app/entrypoint.prod.sh COPY . /usr/src/app/ ENTRYPOINT ["/usr/src/app/entrypoint.sh"] ~
pipenv install --skip-lock --system --devを手動で行うと正常に動作します。
再度実行すると以下のエラー出力されます。
ERROR: .FileNotFoundError: [Errno 2] No such file or directory: './docker-compose.prod.yml'
docker-compose.prod.yml'
version: '3.7' services: # サービス名は自由に設定 django: build: context: ./app dockerfile: Dockerfile.prod # サービス起動後に入力されるコマンドを設定 command: gunicorn django_demo.wsgi:application --bind 0.0.0.0:8000 # データを永続化させる場合の設定。`host:container`でパスを記載 volumes: - ./app/:/usr/src/app/ # 開放するポートを指定。`host:container`でポートを記載 ports: - 8000:8000 # 環境変数を指定 env_file: .env # 接続するサービスを指定 depends_on: - postgres postgres: # 公式からイメージをpull image: postgres:11.4-alpine # データベースの永続化 volumes: - postgres_data:/var/lib/postgresql/data env_file: .env.db
Gunicornのインストールと本番用設定ファイルの作成において、
context: ./app dockerfile: ./Dockerfile.prod
の部分を書き換えてからエラーが発生しました。
ディレクトリは、
docker-demo-with-djangoの下にこのファイルとdocker-compose.prod.yml docker-compose.yml
その下にDockerfile,
db.sqlite3 django_demo Dockerfile Dockerfile.prod entrypoint.prod.sh entrypoint.sh manage.py Pipfile Pipfile.lock
を置いています。
docker-compose.yml
version: '3.7' services: # サービス名は自由に設定 django: # appディレクトリの中から`Dockerfile`を探す build: ./app # サービス起動後に入力されるコマンドを設定 command: python manage.py runserver 0.0.0.0:8000 # データを永続化させる場合の設定。`host:container`でパスを記載 volumes: - ./app/:/usr/src/app/ # 開放するポートを指定。`host:container`でポートを記載 ports: - 8000:8000 # 環境変数を指定 environment: # 1ならデバックモード - DEBUG=1 # setting.pyに記載されているSECRET_KEYを記入 - SECRET_KEY=hoge
Docker.prod
# 公式からpython3.7 on alpine linuxイメージをpull FROM python:3.7-alpine # 作業ディレクトリを設定 WORKDIR /usr/src/app # 環境変数を設定 # Pythonがpyc filesとdiscへ書き込むことを防ぐ ENV PYTHONDONTWRITEBYTECODE 1 # Pythonが標準入出力をバッファリングすることを防ぐ ENV PYTHONUNBUFFERED 1 # psycopg2のインストール RUN apk update \ && apk add --virtual build-deps gcc python3-dev musl-dev \ && apk add postgresql-dev \ && pip install psycopg2 \ && apk del build-deps # Pipenvをインストール RUN pip install --upgrade pip \ && pip install pipenv # ホストのpipfileをコンテナの作業ディレクトリにコピー COPY ./Pipfile /usr/src/app/Pipfile # pipfileからパッケージをインストールしてDjango環境を構築 RUN pipenv install --skip-lock --system --dev # entrypoint.shをコピー COPY ./entrypoint.prod.sh /usr/src/app/entrypoint.prod.sh # ホストのカレントディレクトリ(現在はappディレクトリ)を作業ディレクトリにコピー COPY . /usr/src/app/ # entrypoint.shを実行 ENTRYPOINT ["/usr/src/app/entrypoint.prod.sh"]
docker-compose.prod.ymlのbulidの記述を怪しんでいて調べていますが、分からないで困っています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。