docker上でphpとsqlコンテナを立ち上げるべく下記のコードを設定。
version:"3"
services:
app:
build:
context:
dokerfile: docker/app/Dockerfile
volumes:
-./src:/var/www/html
ports:
-"50090:90"
depends_on:
-db
db:
image: mysql:8.3
ports:
- "53306:3306"
dokerfile: docker/db/Dockerfile
volumes:
- ./docker/db/my.cnf:/etc/mysql/my.cnf
env_file:
- ./docker/db/db-variables.env
$ docker-compose up -d --buildしたらエラーをいくつか吐いた。
⚫︎その1
yaml: line 2: mapping values are not allowed in this context
2行目のmapping値が読み込めない。
→1行目のversion:と"3"の間にスペースがないせいでバージョンの識別が出来ず。
原因:書き方間違い
⚫︎その2
yaml: line 8: could not find expected ':'
8行目に:が見つからない。
→-と./src~の間にスペースがないせいでディレクトリを識別できず。
原因:書き方間違い
⚫︎その3
service volume services.app.volumes.[0] is missing a mount target
マウントポイントが見つからない。
→dockerfileと記載するところをdokerfileと記していた。
原因:スペルミス
⚫︎その4
services.db Additional property dockerfile is not allowed
db内のdockerfileが不明なファイルとして認識されている。
→buildの中にdockerfileを記載するところ、buildの記載がなかった。imageかbuildのどちらかに絞ればよかった。
ちなみにdb/Dockerfileとdb/my.cnfにはそれぞれ
FROM mysql:8.3
ENV LANG ja\_JP.UTF-8
EXPOSE 3306
CMD ["mysqld"]
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
default-caracter-set=utf8mb4
と記載。
ymlとcnfにポート番号や言語・照合条件を記載しているので、このdb/Dockerfileは不要だったなと。
以上を踏まえて、
db/Dockerfileを削除してコードを下記のように修正。
version: "3"
services:
app:
build:
context: .
dockerfile: docker/app/Dockerfile
volumes:
- ./src:/var/www/html
ports:
- "50090:90"
depends_on:
- db
db:
image: mysql:8.3
volumes:
- ./docker/db/my.cnf:/etc/mysql/my.cnf
ports:
- "53306:3306"
env_file:
- ./docker/db/db-variables.env
buildしたところ
$ docker-compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
msr-app-1 msr-app "docker-php-entrypoi…" app 8 minutes ago Up 8 minutes 80/tcp, 0.0.0.0:50090->90/tcp
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f8090e3e954 msr-app "docker-php-entrypoi…" 28 seconds ago Up 27 seconds 80/tcp, 0.0.0.0:50090->90/tcp msr-app-1
9f474e442fee msr-db "docker-entrypoint.s…" 28 seconds ago Exited (1) 19 seconds ago msr-db-1
appは無事に起動。dbがExited(1)で、エラー吐いている。
$ docker logs 9f474e442fee
すると
mysqladmin: [ERROR] unknown variable 'default-caracter-set=utf8mb4'.
2024-04-12 01:59:16+00:00 [ERROR] [Entrypoint]: Unable to shut down server.
caracterって何やねん。my.cnfを修正してbuildしなおしたら
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b98ab337f76 msr-app "docker-php-entrypoi…" 9 seconds ago Up 8 seconds 80/tcp, 0.0.0.0:50090->90/tcp msr-app-1
de9fe0f5f774 mysql:8.3 "docker-entrypoint.s…" 9 seconds ago Up 8 seconds 33060/tcp, 0.0.0.0:53306->3306/tcp msr-db-1
7f46bbe6df00 hello-world "/hello" 3 days ago Exited (0) 3 days ago frosty_tu
晴れてコンテナが起動。
dockerのimageとcontainerの理解がまた一歩深まりました。