Docker:コンテキストを準備できません:Dockerfileパスのシンボリックリンクを評価できません:GetFileAttributesEx


189

今日、Docker Toolbox for Windows 10 64bitをダウンロードしました。チュートリアルを行っています。Dockerfileを使用してイメージをビルドしようとすると、次のエラーが発生します。

手順:

  • Docker Quickstartターミナルを起動しました。
  • 作成後のtestdocker。
  • 「Build your own image」のWebリンクに記載されているようにDockerfileを準備します
  • コマンドの下で実行

docker build -t docker-whale .

Error: $ docker build -t docker-whale .

unable to prepare context: unable to evaluate symlinks in Dockerfile path: GetFileAttributesEx C:\Users\Villanueva\Test\testdocker\Dockerfile: The system cannot find the file specified.

ところで、私は@ https://github.com/docker/docker/issues/14339で言及されているいくつかのオプションを試しました

    $ docker info
    Containers: 4
     Running: 0
     Paused: 0
     Stopped: 4
    Images: 2
    Server Version: 1.10.1
    Storage Driver: aufs
     Root Dir: /mnt/sda1/var/lib/docker/aufs
     Backing Filesystem: extfs
     Dirs: 20
     Dirperm1 Supported: true
    Execution Driver: native-0.2
    Logging Driver: json-file
    Plugins:
     Volume: local
     Network: bridge null host
    Kernel Version: 4.1.17-boot2docker
    Operating System: Boot2Docker 1.10.1 (TCL 6.4.1); master : b03e158 - Thu Feb 11 22:34:01 UTC 2016
    OSType: linux
    Architecture: x86_64
    CPUs: 1
    Total Memory: 996.2 MiB
    Name: default
    ID: C7DS:CIAJ:FTSN:PCGD:ZW25:MQNG:H3HK:KRJL:G6FC:VPRW:SEWW:KP7B
    Debug mode (server): true
     File Descriptors: 32
     Goroutines: 44
     System Time: 2016-02-19T17:37:37.706076803Z
     EventsListeners: 0
     Init SHA1:
     Init Path: /usr/local/bin/docker
     Docker Root Dir: /mnt/sda1/var/lib/docker
    Labels:
     provider=virtualbox

4
更新:docker build -t XXX --file ./Dockefile。働いた。Dockerは、Windowsユーザー向けにドキュメントを更新したい場合があります。
villanux 2016

4
場合docker build -t XXX --file ./Dockefile、それはあなたがファイル名間違って持っている可能性があるため、それはR.欠けている
EXA

17
これは驚くほど悪いエラーメッセージで、「ファイルを開けません」という意味です-LinuxとmacOSでも同じです。
RichVel

ひどく悪いエラーメッセージ。
限定的な贖罪

回答:


205

次のコマンドの実行中:

docker build -t docker-whale .

Dockerfileが現在の作業ディレクトリにあることを確認します。


28
ありがとう。私の問題は、メモ帳でDockerfileを作成し、ファイル名に自動的に.txtを追加していたことでした。
IanGSY 2016年

5
たとえば、プロジェクトに複数のDockerfileがあり、環境ごとに1つある場合など、fフラグを使用してDockerfile名を明示的に書き込むこともdocker build -f Dockerfile-dev.yaml -t my_container .できます。同じことがdocker-composeにも当てはまります。コンテキスト(.)が一致しないため、それらを異なるサブディレクトリに配置しても機能しません。
Sumi Straessle、2017

1
@IanGSY私はあなたにもっと多くのポイントを与えることができればいいのに それもまさに私の問題でした!
K.ブラフォード2017年

5
メモ帳は非常に邪悪なプログラムです。
Lundberg作、2017

98

それは残念だ!

エラーメッセージは誤解を招くです。問題は、シンボリックリンクとはまったく関係ありません。通常、Dockerがビルドを説明するDockerfile見つけられないのは、これだけです。

一般的な理由は次のとおりです。

  • Dockerfileの名前間違っいます
    それは呼ばれなければならないDockerfile。それが呼び出された場合、例えば、dockerfile.DockerfileDockerfile.txt、または他の、それは検出されません。
  • Dockerfileはコンテキストにありません
    と言うdocker build contextdir場合、Dockerfileはにある必要がありますcontextdir/Dockerfile。たとえば、それを持っている場合、./Dockerfile代わりに、それは見つかりません。
  • Dockerfile はまったく存在しません
    ばかげて聞こえますか?さて、いいDockerfileを書いた後、GitLab CIから上記のエラーメッセージを受け取りましたが、チェックインするのを忘れました。承知しました。ありえない?番号。

それは唯一の恥ではありません...

この1つのエラーメッセージだけでは、あいまいで紛らわしいだけではありません。一般的に、Dockerの概念の一部とドキュメントの多くは、意味的に不正確であると思います。

本当に悪い点の1つは「タグ」の概念です(2019年8月現在)。ドキュメントをどこで見るかに応じて、次のすべてのことを言っています(多かれ少なかれ明確に)。

  • tagコマンドはありますが、指定する引数はタグまたはタグ名ではなく、イメージ名と呼ばれます。
  • イメージ名は、コロンで区切られたイメージ名とタグで構成されます。
  • ではtag、コマンド引数、タグ名は省略可能ですが、イメージ名は必須です。明らかです。
  • ドキュメントページの言葉で:
    docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • ただし、イメージ名の前にホスト名を付けることができるため、そのイメージ名のすべてのイメージ名が実際にイメージ名であるとは限りません。
  • ただし、そのホスト名の部分イメージ名の一部見なされることもあります。
  • いずれにせよ、ホスト名が含まxれている(以前の、ただし魔法のように常にしがみついている)イメージ名は、そのホストx(レジストリ内)に存在するはずです。そのような画像にアクセスしたい場合、多かれ少なかれ、この名前とホスト接頭辞を使用する必要がありますx
  • ただし、その名前のイメージは、だけでなく、任意のホストに配置できます。これはx、イメージの「プッシュ」がx別の操作であるためです。
  • そのため、Dockerイメージのリストでその名前を確認してもあまり意味はありませんが、確かに何かをほのめかします。時々間違って。
  • ところで、名前空間について言及しましたか?イメージ名では、ホスト名とイメージ名の間を移動できます。また、どこを見れば画像名の一部であるかどうかもわかります。

これで混乱したとしても、それあなたの責任ではありません

暴言の終わり。


これは、後半がなければかなり強力な(そしてより適切な)回答になると思います。
Paul Gear

1
すばらしい回答、そして背景情報に感謝
レオン

同じメッセージで私の問題を解決した追加のヒント:CaSinGが正しいことを確認してください。ディレクトリパスおよびDockerfileの場合。Linuxはそれについてかなりうるさいので。
RaimondB

38

Windows 8で作業している場合は、Dockerツールボックスを使用します。mydockerbuildディレクトリから、Dockerfileがテキストファイルであるため、次のコマンドを実行します

docker build -t docker-whale -f ./Dockerfile.txt .

3
これを行う必要がある場合の将来の参照のために、これはDockerfileが拡張子を持っているためです。拡張子を使用してファイルを手動で設定すると、不要な頭痛が追加されます。拡張機能を表示するようにWindowsエクスプローラを設定してから、拡張機能を削除する必要があります。
Alex

:あなたは、「はじめに」ドッキングウィンドウのドキュメントに沿って、次のしている場合は、この使用するチュートリアルdocker build -t friendlyhello -f ./Dockerfile.txt .
マイク・ケロッグ

ファイル名とダミーパスも指定する必要があるというのは本当に悪いセマンティクスです。および/または常にファイルの名前をDockerfile .. :-(
myloginid

これは私の日を救った。ちなみに、Macを使っています。しかし、ここでの問題は、Dockerfileがプレーンテキストファイルで作成されたことです。助けてくれたバディに感謝します。
Sachidananda Naik

23

ファイルの名前はである必要がDockerfileあります.Dockerfileファイルには拡張子を付けないでください。



14

Dockerfileから拡張子.txtを削除してコマンドを実行するだけです

docker build -t image-name 

それは確かに動作します。


9

正しいコマンドを使用してイメージを作成しましたが、(MacBookで)このエラーが発生しました。

docker build -t testimg .

後で私はその道が問題であることを発見しました。Dockerファイルを含む正しいパスに移動するだけです。現在の作業ディレクトリをもう一度確認してください。パニックするものはありません。


4

Windows 10では、ピリオドが最初のパラメーターです

docker build . -t docker-whale


8
もう(もしあれば) docker build -t docker-whale .有効なコマンドではあり
sebagomez


4

WSLでは、パス変換に問題があるようです。UbuntuでのDockerfileの場所(私がdockerを実行していて、Dockerfileが存在する場所)は "/ home / sxw455 / App1"ですが、次のコマンドはどちらも機能しません。

$ pwd
/home/sxw455/App1
$ ll
total 4
drwxrwxrwx 0 sxw455 sxw455 4096 Dec 11 19:28 ./
drwxr-xr-x 0 sxw455 sxw455 4096 Dec 11 19:25 ../
-rwxrwxrwx 1 sxw455 sxw455  531 Dec 11 19:26 Dockerfile*
-rwxrwxrwx 1 sxw455 sxw455  666 Dec 11 19:28 app.py*
-rwxrwxrwx 1 sxw455 sxw455   12 Dec 11 19:27 requirements.txt*

$ docker build -t friendlyhello .
unable to prepare context: unable to evaluate symlinks in Dockerfile path: GetFileAttributesEx C:\Windows\System32\Dockerfile: The system cannot find the file specified.

$ docker build -t friendlyhello "/home/sxw455/App1"
unable to prepare context: path "/home/sxw455/App1" not found

しかし、Windowsでは、実際のパスは次のとおりです。

C:\Users\sxw455\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\sxw455\App1

そして、私はこれをしなければなりませんでした(たとえbashから実行したとしても):

$ docker build -t friendlyhello 
"C:\Users\sxw455\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\sxw455\App1"

Sending build context to Docker daemon   5.12kB
Step 1/7 : FROM python:2.7-slim
 ---> 0dc3d8d47241
Step 2/7 : WORKDIR /app
 ---> Using cache
 ---> f739aa02ce04
Step 3/7 : COPY . /app
 ---> Using cache
 ---> 88686c524ae9
Step 4/7 : RUN pip install --trusted-host pypi.python.org -r requirements.txt
 ---> Using cache
 ---> b95f02b14f78
Step 5/7 : EXPOSE 80
 ---> Using cache
 ---> 0924dbc3f695
Step 6/7 : ENV NAME World
 ---> Using cache
 ---> 85c145785b87
Step 7/7 : CMD ["python", "app.py"]
 ---> Using cache
 ---> c2e43b7f0d4a
Successfully built c2e43b7f0d4a
Successfully tagged friendlyhello:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

初期インストール中に環境変数で同様の問題があり、Windows DockerCEをインストールし、Ubuntu DockerCEをインストールするのではなく環境変数をハックするといういくつかのアドバイスに従いました。 systemctl。Windows Docker CEのインストールが完了して環境変数が設定されると、dockerはWSL / Ubuntuで正常に動作します。


これは私のために働いた!Docker Toolboxのみをインストールし、WSLにはインストールしませんでした。代わりに、Windows実行可能ファイルを直接使用しています。これは、WSLで実行できるためです。
ローレンスリー

4

VS2017 Docker SupportツールでDockerFileを作成しましたが、同じエラーが発生しました。しばらくして、私はDockerfileを含む正しいディレクトリにいないことに気付きました(~\source\repos\DockerWebApplication\)(~/source/repos/DockerWebApplication/DockerWebApplication)プロジェクト内にある正しいファイルにcdし、Docker イメージを正常に作成しました。


4

以下のコマンドは私のために働きましたdocker build -t docker-whale -f Dockerfile.txt。


Dockerfileは.txtファイルではありません。あなたがそれを.txtファイルとして持っているならば、それは再びエラーを与えるでしょう。
ドナルドシャヒ

3

dockerfileを構築する2つの方法:

ビルド元のファイル名を指定せず、パスを指定してビルドするだけです(ファイル名にDockerfile拡張子を付けないようにする必要があります。例:docker build -t docker-whale:tag path/to/Dockerfile

または

あなたはでファイルを指定することができ-f、それがどのような拡張子(妥当な範囲内で問題ではない.txt.dockerfile.Dockerfileあなたが例えば、使用することを決定した等。) docker build -t docker-whale:tag /path/to/file -f docker-whale.dockerfile


2

私は最初にPowerShellでDockerfileを作成しましたが、ファイルに拡張子が表示されませんでしたが、PSファイルタイプとして表示されました... Notepad ++からファイルを作成したら、必ず「すべてのタイプ()」ファイルを選択してくださいファイル名に拡張子を付けずに入力します(Dockerfile)。これにより、イメージビルドコマンドが正常に完了しました。...Dockerfileのタイプが「ファイル」であることを確認してください...


2

問題は、ファイル名はDockerFileではなくDockerfileでなければならず、DockerfileはD大文字で、その後に小文字のpls注でockerfileが続く必要があることです。


2

あなたDOCKERfileがアプリケーションディレクトリのルートにいることを確認してください、私はsrcに私のものを持っていましたが、Dockerがへのパスを見つけていなかったため、このエラーが発生しましたDOCKERfile


1

Dockerfileをビルドするには、自動化されたコンテンツをDockerfileに保存します。ファイルコマンドを開いている間、Dockerfileではありません。

$ notepad Dockerfile 

(テキストファイルが書き込まれるため、ファイルを作成できません)

ビルドファイルを実行するには:

$ notepad Dockerfile

そして今実行します:

$ docker build -t docker-whale .

Dockerfileの現在のディレクトリにいることを確認してください。


1

最も重要なことは、ファイル名が Dockerfile別の名前を使用して場合ないこと(少なくとも、私にとってはそうではありませんでした)。

また、あなたはDockerfileが使用されているのと同じディレクトリAにある場合.、すなわち docker build -t Myubuntu1:v1 . または絶対パスを使用する、すなわち docker build -t Myubuntu1:v1 /Users/<username>/Desktop/Docker


1

私の場合(Windows 10から実行)
1)ファイルの名前myDockerFile.DockerfileDockerfile(ファイル拡張子なしで)に変更します。
次に、フォルダーの外側から次のコマンドを実行ます。

docker build .\Docker-LocalNifi\ 

これは私と職場の同僚のために働いています、それがあなたにも役立つことを願っています


1

ファイル名「Dockerfile」が拡張子なしで保存されていることを確認してください。拡張子のないファイルを作成するだけです。

また、Dockerfileが、Dockerイメージを構築しようとしている場所と同じディレクトリにあることを確認してください。


1

環境に複数のDockerファイルがある場合は、Dockerfileだけでは十分ではありません。

docker build -t ihub -f Dockerfile.ihub .

file(-f引数)コマンドを使用して、Dockerファイル(Dockerfile.ihub)を指定します


.上記のように、行の最後に(ドット)が必要です。
パープルジャケット

のドキュメントdocker buildはこちら:docs.docker.com/engine/reference/commandline/build
Purplejacket

0

私が作業していたパスがJunctionディレクトリの下にあったときにWindowsでこれを取得しました。だから私の修正はそのパスの下で動作しないことでした。


0

Macでは以下のコマンドで動作します。(あなた.Dockerfileがあなたのルートディレクトリにあることを願っています)

docker build -t docker-whale -f .Dockerfile .

0

この問題は、DockerFileの作成手順に関連しています。

機能するには、cmdを開き、cdで目的のディレクトリに移動して、次のように入力します。

abc>DockerFile

これにより、フォルダー内にDockerFileというファイルが作成されます。

今タイプ:

notepad DockerFile 

これにより、DockerFileファイルがメモ帳で開かれ、提供された標準コードをコピーして貼り付ける必要があります。

ファイルを保存し、最後に、Dockerを入力してイメージをビルドします。

docker build -t docker-whale . 

これは私のために働いており、それが他の人を助けることを願っています


0

Dockerfile.txt作業ディレクトリに誤って作成しましたが、前述のエラーが発生しましたbuild

修正は拡張機能削除することでした.txt、ファイルから。

ファイル名は、あるべきDockerfile唯一の任意の拡張子なし


0

docker build -t getting-started .プロジェクトディレクトリで実行し、Dockerfileが存在し、.txt拡張子がないことを確認します。Windowsを使用している場合は、ファイルエクスプローラーのビュータブの下にある「ファイル名拡張子」をチェックして、.txtが存在するかどうかを確認し、前者がtrueの場合は削除します。幸運を。


0

私も同じ問題に直面し、DockerFileという名前のファイルを作成し、イメージの作成中に実行したいすべてのコマンドについて言及したときに解決されました。


0

エラーは、正しく入力されていないdocker buildを使用しPATH | URLているかDockerfile、現在のディレクトリでが見つからないことを意味します。また、統合されたターミナル(bashIDEやテキストエディター内など)からコマンドを実行する場合は、そのための管理者権限があることを確認してください。あなたがPATHあなたの端末からpwd(中bash shelldir簡単な使用している場合cli、Windows上)を、あなたがイメージをビルドしたい正確なパスをコピーします。

docker build C:\windows\your_amazing_directory

docker build --help また、不正なコマンドや不正なコマンドの場合に使用できるオプションも表示されます。


-1

私はこれを試してみましたがうまくいきました:

$ docker build -t test_dotnet_image 
"C:\Users\ssundarababu\Documents\Docker\Learn\SimpleDockerfile"

フォルダ名の前後の引用符+引用符を外してください。

注:フォルダー"C:\Users\ssundarababu\Documents\Docker\Learn\SimpleDockerfile"にはDockerfileがあります。


-1

windows / linuxのコマンドラインからイメージをビルドするには。1.現在のディレクトリにdockerファイルを作成します。例:FROM ubuntu RUN apt-get update RUN apt-get -y install apache2 ADD。/ var / www / html ENTRYPOINT apachectl -D FOREGROUND ENV name Devops_Docker 2. .txt拡張子を付けて保存しないでください。3.コマンドラインで、コマンドdocker buildを実行します。-t apache2image

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.