`docker-compose up -d` したら `open /dev/ptmx: no such file or directory: unknown` でエラーになった

仕事で使う技術的なこと

主題の通り、Docker のコンテナを立ち上げようとするとエラーになりました。
Docker のエラーはたいていググったら解決するんですけど、今回は結構てこずったので備忘録しておきます。

環境

  • Windows Home 64 bit
  • Docker Desktop

症状

以下のような Dockerfile と docker-compose.yml を用意しました。

# Dockerfile
FROM node:slim

RUN apt-get update
RUN npm install -g @vue/cli

WORKDIR /dev
# docker-compose.yml
version: "3"

services:
  vue:
    build: ./
    ports:
      - 8082:8080
    stdin_open: true
    volumes:
      - ./dev/:/dev
    tty: true

これに対して、以下の通りコンテナ構築+立ち上げを実行するとエラーになりました。

>  docker-compose up -d
# ・・・
# 省略
# ・・・
[+] Running 0/1
 - Container vue-demo_vue_1  Starting                                                                             17.8s
Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: open /dev/ptmx: no such file or directory: unknown

Error response from daemon: OCI runtime create failed というのはいろんな派生形があるらしく、それだとググったらいろいろ引っかかるのですが、
open /dev/ptmx: no such file or directory: unknown というキーワードはあまりヒットしませんでした。

解決策

本家の github のリポジトリの issue から検索すると、以下が見つかりました。

docker run with -t option lead to "open /dev/ptmx: no such file or directory" message · Issue #2067 · docker/cli
Description docker run with -t option lead to "open /dev/ptmx: no such file or directory" message Steps to reproduce the issue: Run: docker run -it hello-world ...

これによると、なんか /dev:/dev というキーワードがあります。
ここが怪しいのかなと思い Dockerfile と docker-compose.yml を以下のように変更してみました。

# Dockerfile(変更後)
FROM node:slim

RUN apt-get update
RUN npm install -g @vue/cli

WORKDIR /work   # ← dev -> work に変更
# docker-compose.yml(変更後)
version: "3"

services:
  vue:
    build: ./
    ports:
      - 8082:8080
    stdin_open: true
    volumes:
      - ./dev/:/work    # ← dev -> work に変更
    tty: true

するととりあえず解決しました。

>  docker-compose up -d --build
# ・・・
# 省略
# ・・・
[+] Running 1/0
 - Container vue-demo_vue_1  Running

正直なぜなのか理由はわかっていませんが・・・

コメント

タイトルとURLをコピーしました