docker-compose up -d でsh: 0: Can't openと出たときに解決した時の備忘録。


docker-composeでシェルを動かす時にsh: 0: Can't openと出てきた時に確認する事

qiita記事Vue.js & Django を Docker と組み合わせてSPA+APIサーバー環境をつくる
今回はこの記事を参考にしてdockerを使って環境構築を進めていきます。

そこでタイトルの通り sh: 0: Can't open というerrorが頻発したのでそれの解決方法をまとめていきます。

  1. そもそもdokercontainerに起動するファイルが入っていない。
  2. volumesのパスが間違っている。

のどちらかだと思います。

1.そもそもdokercontainerに起動するファイルが入っていない。

原因の確認方法として

$ docker ps -a

でコンテナidを確認

$ docker commit -m exited コンテナid sh

でコンテナ名を取得

$ docker run --rm -it コンテナ名 sh 

でコンテナ内に移動

移動後

$ ls

コマンドでファイルを確認。

で自分が移したいファイルがちゃんとコンテナ内にあるか確認。移っていなかったら、dockerfileを再確認。

2. volumesのパスが間違っている。

docker-compose.yml
---------以下略---------
volumes:
      - docker-compose.ymlから移したいファイルの相対パス:dockercontainerの絶対パス
-----------------------

ここの設定がまちがえていると動きませんでした。

自分の場合は

docker-compose.yml

version: '3'

services:

  front:
    build:
      context: .
      dockerfile: ./Dockerfile/front/Dockerfile
    command: sh /app/start.sh
    volumes:
      - ./front:/app/:cached
      - ./front/node_modules:/app/node_modules
    ports:
      -  "8080:8080"

このようなファイルを作って動かしていましたがエラーの連続でしたが
volumesのfrontの部分を自分の作ったアプリケーションと同じ名前にしたら問題なく動きました。