Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed:
Dockerで環境をを作っていると、なんかエラーとなりました。今回はこんなエラーがでました
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/home/vagrant/local_workspace/php/info.php" to rootfs at "/usr/share/nginx/html/info.php": mount /home/vagrant/local_workspace/php/info.php:/usr/share/nginx/html/info.php (via /proc/self/fd/7), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
エラーとしてはマウントエラーとなります。
該当ファイル
docker-compose.ymlになります
services:
amazonlinux2023:
container_name: "web"
build:
dockerfile: ./nginx/Dockerfile
volumes: #ホストにあるファイルをマウント
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./php/info.php:/usr/share/nginx/html/info.php #ここがphpコンテナのvolumesと同じ
tty: true # ← これがないとコンテナにログインできない
ports:
- 80:80 #8080ポート
links:
- php
environment:
TZ: Asia/Tokyo
#PHPイメージ。ここではPHP8系を使用
php:
container_name: "php"
build:
dockerfile: ./php/Dockerfile
command: php-fpm -F #php-fpmの起動
volumes:
- ./php/info.php:/usr/share/nginx/html/info.php
- ./phpt/test.php:/var/www/html/test.php
tty: true
コードは一部抜粋となります。
原因
コンテナwebとコンテナphpが同じボリュームを参照してます。この状態だとなぜかエラーとなってしまいます。
解決策
docker compose up -d --build
コマンドを使う- 共有フォルダを別にする
1について
なぜこれが成功したのかわかりませんが、docker compose build -no--cache
でやってもうまくいかなかったので適当にdocker compose up -d --build
としたらうまくいきました
2について
共有フォルダを別にするですが、この方が確実です。コードを載せておきます
services:
amazonlinux2023:
container_name: "web"
build:
dockerfile: ./nginx/Dockerfile
volumes: #ホストにあるファイルをマウント
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./share:/usr/share/nginx/html #ここがphpコンテナのvolumesと同じ
tty: true # ← これがないとコンテナにログインできない
ports:
- 80:80 #8080ポート
links:
- php
environment:
TZ: Asia/Tokyo
#PHPイメージ。ここではPHP8系を使用
php:
container_name: "php"
build:
dockerfile: ./php/Dockerfile
command: php-fpm -F #php-fpmの起動
volumes:
- ./share:/usr/share/nginx/html
tty: true
このように別ディレクトリを作って、そこを共有すればよいみたいです。
ディレクトリ図
ディレクトリの構成としてはこんな感じになります
プロジェクト名
│
├──nginx
│ ├Dockerfile
│ │
│ └default.conf
│
│
│
├──php
│ │
│ ├Dockerfile
│ │
│ └www.conf
│
├share
│
├info.php
│
└test.php
こんな感じになります。これで起動します。
個人支援・寄付について
サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。
- ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS