web-dev-qa-db-ja.com

ディレクトリをファイルにマウントしようとしていますか(またはその逆)。

バージョン17.06.0-ceのドッカーがあります。 docker with commandを使用してNGINXをインストールしようとすると:

docker run -p 80:80 -p 8080:8080 --name nginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d nginx:latest

それはそれを示しています

docker:デーモンからのエラー応答:ociランタイムエラー:container_linux.go:262:コンテナープロセスの開始により "process_linux.go:339:container initにより\" rootfs_linux.go:57:マウント\\ "/ appdata/nginx/conf /が発生しました\\ nginx.conf "rootfsのに\\ "の/ var/libに/ドッキングウィンドウ/ AUFSを/ mnt/dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0 \\" \\で" は/ var/libに/ドッキングウィンドウ/ AUFSを/ mnt/dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0の/ etc/nginxの/ nginx.conf \\ "により\\"がディレクトリになりません\\ "\" ":ディレクトリをファイルにマウントしようとしていますか(またはその逆)。指定されたホストパスが存在し、予想されるタイプであるかどうかを確認してください。

nginx.confファイルをマウントしない場合は、すべて問題ありません。それでは、どうすれば設定ファイルをマウントできますか?

44
Steven Luo

ドッカーは$PWD/conf/nginx.confをファイルではなくfolderとして認識するためです。
$PWD/conf/ディレクトリにnginx.confがdirectoryとして含まれていないか確認してください。

で試す

> cat $PWD/conf/nginx.conf 
cat: nginx.conf/: Is a directory

それ以外の場合は、 Docker issue を開きます。
同じ構成でうまく動作します。

13
user4912329

Docker for Windowsを使用している場合、パスワードを最近変更したときにこのエラーが発生する可能性があります。

直し方:

  1. 最初に、破損したコンテナのボリュームを必ず削除してください
    docker rm -v <container_name>
    更新:最初にボリュームを削除する必要なく、以下の手順が機能する場合があります。
  2. Docker設定を開く
  3. [共有ドライブ]タブに移動します
  4. ウィンドウの下部にある[資格情報のリセット...]リンクをクリックします。
  5. 使用するドライブをDocker で再共有します
    • ユーザー名/パスワードの入力を求められます
  6. 「適用」をクリックします
  7. [リセット]タブに移動します
  8. [Dockerを再起動]をクリックします
  9. コンテナ/ボリュームを再作成します

ソリューションのクレジットはGitHubのBaranOrnarliに送られます。

116
Jesse Webb

コンテナに関連付けられているボリュームを削除します。 docker ps -aを使用してコンテナ名を見つけ、次を使用してコンテナを削除します。

docker rm -v <container_name>

問題:

ホストディレクトリにあるはずの場所にファイルが存在しないときに、以前にdocker runコマンドを実行しようとした場合、直面しているエラーが発生する可能性があります。この場合、dockerデーモンは、代わりにコンテナー内にディレクトリを作成します。正しいファイルがホストディレクトリに置かれ、Dockerが再度実行されると、後で適切なファイルへのマッピングに失敗します。

解決策:

コンテナに関連付けられているボリュームを削除します。他のコンテナボリュームを気にしない場合は、次も使用できます。

docker volume rm $(docker volume ls -q)
13
Ayushya

Windows用のDocker ToolBoxを使用しています。デフォルトではC Driveが自動的にマウントされるため、ファイルをマウントするには、ファイルとフォルダーがC DRIVEの中にあることを確認してください。

例:C:\Users\%USERNAME%\Desktop

3
Abhishek D K

同じ問題がありました。 Windows 10 17.09でWSLを使用してDocker Desktopを使用していました。

問題の原因:問題は、Docker for Windowsが、これに一致する形式でボリュームパスを提供することを期待していることです:/ c/Users/username/app。ただし、WSLは代わりに/ mnt/c/Users/username/app形式を使用します。コンソールでファイルをチェックするときにそれを見て、私にとってはすべてが正しかったため、これは混乱しています。 ボリュームパスについてのDocker for Windowsの期待を知りませんでした。

問題の解決策: Docker for WindowsとWSLの違いを修正するためにカスタムマウントポイントをバインドしました:Sudo mount --bind/mnt/c/cこの素晴らしいガイドで提案されているように WindowsおよびWSLのDockerを完全に動作するように設定する で、すべてが完全に動作しています。

WSLの使用を開始する前に、Git Bashを使用していましたが、この問題も発生していました。

2
webcu

不明:ディレクトリをファイルにマウントしようとしていますか(またはその逆)?指定されたホストパスが存在し、予想されるタイプであるかどうかを確認します

Mac環境のniginxでも同様のエラーが発生しました。 Dockerはdefault.confファイルを正しく認識しませんでした。相対パスを絶対パスに変更すると、エラーが修正されました。

      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
0
Yano Yujin

代わりに絶対パス/完全パスを使用してください$ PWD/conf/nginx.conf .itは動作します

EX:docker run --name nginx-container5 --rm  -v /home/sree/html/nginx.conf:/etc/nginx/nginx.conf -d -p 90:80 nginx
b9ead15988a93bf8593c013b6c27294d38a2a40f4ac75b1c1ee362de4723765b

root@sree-VirtualBox:/home/sree/html# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
b9ead15988a9        nginx               "nginx -g 'daemon of…"   7 seconds ago       Up 6 seconds        0.0.0.0:90->80/tcp   nginx-container5
e2b195a691a4        nginx               "/bin/bash"              16 minutes ago      Up 16 minutes       0.0.0.0:80->80/tcp   test-nginx

ファイルをローカルに持っていなかったので、同じヘッドスクラッチがあったので、フォルダとして作成しました。

mimas@Anttis-MBP:~/random/dockerize/tube$ ls
Dockerfile
mimas@Anttis-MBP:~/random/dockerize/tube$ docker run --rm -v $(pwd)/logs.txt:/usr/app/logs.txt devopsdockeruh/first_volume_exercise
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"rootfs_linux.go:58: mounting \\\"/Users/mimas/random/dockerize/tube/logs.txt\\\" to rootfs \\\"/var/lib/docker/overlay2/75891ea3688c58afb8f0fddcc977c78d0ac72334e4c88c80d7cdaa50624e688e/merged\\\" at \\\"/var/lib/docker/overlay2/75891ea3688c58afb8f0fddcc977c78d0ac72334e4c88c80d7cdaa50624e688e/merged/usr/app/logs.txt\\\" caused \\\"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.
mimas@Anttis-MBP:~/random/dockerize/tube$ ls
Dockerfile  logs.txt/
0
t0rjantai

Virtual Boxを6.0.10に更新すると、Docker Toolboxのこの問題が修正されました

https://github.com/docker/toolbox/issues/844

この種のエラーが発生していました。


mlepisto@DESKTOP-VKJ76GO MINGW64 ~/G/Projects
$ touch resolv.conf

mlepisto@DESKTOP-VKJ76GO MINGW64 ~/G/Projects
$ docker run --rm -it -v $PWD/resolv.conf:/etc/resolv.conf ubuntu /bin/bash
C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"rootfs_linux.go:58: mounting \\\"/c/Users/mlepisto/G/Projects/resolv.conf\\\" to rootfs \\\"/mnt/sda1/var/lib/docker/overlay2/61eabcfe9ed7e4a87f40bcf93c2a7d320a5f96bf241b2cf694a064b46c11db3f/merged\\\" at \\\"/mnt/sda1/var/lib/docker/overlay2/61eabcfe9ed7e4a87f40bcf93c2a7d320a5f96bf241b2cf694a064b46c11db3f/merged/etc/resolv.conf\\\" caused \\\"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.

# mounting to some other file name inside the container did work just fine
mlepisto@DESKTOP-VKJ76GO MINGW64 ~/G/Projects/
$ docker run --rm -it -v $PWD/resolv.conf:/etc/resolv2.conf ubuntu /bin/bash
root@a5020b4d6cc2:/# exit
exit

VitualBoxの更新後、すべてのコマンドは問題なく動作しましたか????

0
Mikael Lepistö