web-dev-qa-db-ja.com

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

本日、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
100
villanux

次のコマンドを実行中

"docker build -t docker-whale ."

dockerfileが現在の作業ディレクトリにあることを確認してください。

130

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

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

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

docker build -t image-name 

それは確かにうまくいくでしょう。

12
satya

私は自分のファイルをDockerfile(大文字)の代わりにdockerfileと名付けました。そしてそれを変更すると、それは私の "Dockerfile"の処理を開始しました。

10
Alan Fitzgerald

ファイルの名前は.DockerfileではなくDockerfileであるべきです。 ファイルに拡張子を付けないでください

9
SharpCoder

正しいコマンドを使って画像を作成したにもかかわらず、このエラーが出ました(MacBookの場合)。

docker build -t testimg .

後でその経路が問題であることがわかりました。 dockerファイルを含む正しいパスに移動するだけです。現在の作業ディレクトリを再確認してください。パニックに陥ることはありません。

8
arunprakashpj

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

4
Hasan

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.

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

3
Comissar

それは、メモ帳がDockerfileの最後に ".txt"を追加するからです。

3
Aurélien

私はもともと私のDockerfileをPowerShellで作成していましたが、ファイルの拡張子がPSファイルタイプとして表示されていませんでしたが…Notepad ++からファイルを作成すると、必ず「すべてのタイプ() "ファイル名に拡張子を付けないファイルタイプ(Dockerfile)。これで私のイメージ構築コマンドを正常に完了できました。Dockerfileのタイプが" File "であることを確認してください...

2
Helper7123

問題は、ファイル名はDockerfileであるべきで、DockerFileやdockerfileではないということです。

2
vincent

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

docker build . -t docker-whale

2
PDA

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

$ notepad Dockerfile 

(テキストファイルが書かれているのでファイルはビルドできません)

ファイルをビルドするには

$ notepad Dockerfile

そして今実行します。

$ docker build -t docker-whale .

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

1
niteshkumarmodi

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

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

1
Nakesh

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

docker build .\Docker-LocalNifi\ 

これは私のために、そして仕事の中で私の同僚のために働いています、あなたにとっても役立つことを願っています

1
Yohan

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

Dockerfileと同じディレクトリにいる場合は、.、つまりdocker build -t Myubuntu1:v1 .を使用するか、絶対パス、つまりdocker build -t Myubuntu1:v1 /Users/<username>/Desktop/Dockerを使用します。

1
ady6831983

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

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

abc>DockerFile

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

今タイプしなさい:

notepad DockerFile 

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

ファイルを保存して、最後に、Dockerを使って画像を作成します。

docker build -t docker-whale . 

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

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

0
Chris F Carroll

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

0
AMAN BHARDWAJ

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

docker build -t docker-whale -f .Dockerfile .
0
Chanaka Caldera

それは残念だ!

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

典型的な理由は次のとおりです。

  • Dockerfileには間違った名前があります。
    Dockerfileと呼ばれる必要があります。たとえば、dockerfile.DockerfileDockerfile.txt、またはその他の名前で呼び出された場合、見つかりません。
  • Dockerfileはnot in contextです。
    docker build contextdirと言う場合、Dockerfileはcontextdir/Dockerfileになければなりません。代わりにDockerfileなどがある場合、見つかりません。
  • Dockerfileは存在しません
    ばかげた音?さて、Nice Dockerfileを作成した後、GitLab CIから上記のエラーメッセージを受け取りましたが、チェックインするのを忘れました。はい。ありそうにない?いや.

それだけが恥ではありません...

この1つのエラーメッセージが曖昧でわかりにくいだけではありません。私は通常、ドッカーの概念の一部とドキュメントの多くが意味的に不正確であると感じています。

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

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

これに混乱している場合、それはnotのせいです。

暴言の終わり。

0
Lutz Prechelt