#はじめに
自分の備忘録として、同じようなところで詰まっている人向けとして書こうと思いました。
開発はまだどんなアプリを作るかは漠然としかないのでこれからやっていきながらゆる〜く書いていきます。
#環境
・OS: Mac
・Docker Desktop
Docker version 20.10.7
docker-compose version 1.29.2
エディタはVScodeを使っています。
#環境構築
Dockerの構築こちらの記事を参考に作りました。
https://qiita.com/bakupen/items/f23ce3d2325b4491a2dd#%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B
#詰まったところ
上記の環境構築のところで、エラーがいくつか出てきて解決したので書いておきます。
###1.Dockerfile
以下のコマンド
$ docker-compose run web django-admin.py startproject djangopj .
を打った時に、以下のエラーが出てきました。
Traceback (most recent call last):
File "compose/cli/main.py", line 81, in main
File "compose/cli/main.py", line 203, in perform_command
File "compose/metrics/decorator.py", line 18, in wrapper
File "compose/cli/main.py", line 968, in run
File "compose/cli/main.py", line 1426, in run_one_off_container
File "compose/project.py", line 664, in up
File "compose/service.py", line 364, in ensure_image_exists
File "compose/service.py", line 1111, in build
File "compose/service.py", line 1841, in build
compose.service.BuildError: (<Service: web>, {'message': 'dockerfile parse error line 1: FROM requires either one or three arguments'})
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "docker-compose", line 3, in <module>
File "compose/cli/main.py", line 92, in main
TypeError: can only concatenate str (not "dict") to str
[89456] Failed to execute script docker-compose
####解決方法
Dockerfileの1行目の
FROM python:3
以降に空白が入っていたことが原因でした。
なので、Dockerfile・docker-compose.yml・requirements.txt全てを以下のように変更してもう一度
$ docker-compose run web django-admin.py startproject djangopj .
を実行するとできました。
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install --upgrade pip && pip install -r requirements.txt
COPY . /code/
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: django-db
MYSQL_USER: django
MYSQL_PASSWORD: django
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8a000"
depends_on:
- db
Django==3.1
mysqlclient
###2.起動
最後にサービスを起動させようと、
$ docker-compose up -d
を打ったところ、
sample-pj_db_1 is up-to-date
Starting sample-pj_web_1 ...
Starting sample-pj_web_1 ... error
ERROR: for sample-pj_web_1 Cannot start service web: driver failed programming external connectivity on endpoint sample-pj_web_1 (363f0e70a5a24e61cb50bd873c1f037dbb675f908f9f3ed530e5a348406a60fe): Bind for 0.0.0.0:8000 failed: port is already allocated
ERROR: for web Cannot start service web: driver failed programming external connectivity on endpoint sample-pj_web_1 (363f0e70a5a24e61cb50bd873c1f037dbb675f908f9f3ed530e5a348406a60fe): Bind for 0.0.0.0:8000 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.
というエラーが出てきました。
####試したこと
$ sudo lsof -i:8000
を打つと何か出てきたので、
$ sudo kill 8000
をしましたが、
kill: 8000: No such process
と出てきてできませんでした。
####解決方法
$ docker ps
を打つと、
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
034a983e91a4 mysql:5.7 "docker-entrypoint.s…" 22 minutes ago Up 22 minutes 3306/tcp, 33060/tcp sample-pj_db_1
373f2f6bfffc restaurant_web "python3 manage.py r…" 5 weeks ago Up 4 weeks 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp restaurant_web_1
8e747bef142f mysql:5.7 "docker-entrypoint.s…" 5 weeks ago Restarting (1) 10 seconds ago restaurant_web
と出てきたので、
$ docker stop 373f2f6bfffc
$ docker stop 8e747bef142f
をしてから、
$ docker-compose up -d
#おわり
今日はここまでとします。