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が同じボリュームを参照してます。この状態だとなぜかエラーとなってしまいます。

解決策

  1. docker compose up -d --buildコマンドを使う
  2. 共有フォルダを別にする

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