Docker RUN PWD находится в корневом каталоге Windows вместо текущего рабочего каталога. - PullRequest
0 голосов
/ 13 июня 2019

По какой-то странной причине мой нынешний рабочий каталог - /. Это должен быть текущий каталог dockerfile, но это не так. Кто-нибудь видел это раньше? Я использую PowerShell и Cmder для Windows и получаю одинаковые результаты.

Dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:2.2

#WORKDIR /bin
RUN pwd
RUN ls -la

#COPY . app/

RUN dotnet --version
ENTRYPOINT ["dotnet", "app/simple-dotnet-api.dll"]

Выход:

λ docker build --no-cache -t simpledotnetapi .
Sending build context to Docker daemon  252.4kB
Step 1/6 : FROM mcr.microsoft.com/dotnet/core/sdk:2.2
 ---> 08663b8eaa01
Step 2/6 : RUN ls -la
 ---> Running in ac2e849a757e
total 72
drwxr-xr-x   1 root root 4096 Jun 13 16:17 .
drwxr-xr-x   1 root root 4096 Jun 13 16:17 ..
-rwxr-xr-x   1 root root    0 Jun 13 16:17 .dockerenv
drwxr-xr-x   1 root root 4096 Jun 11 00:30 bin
drwxr-xr-x   2 root root 4096 Mar 28 09:12 boot
drwxr-xr-x   5 root root  340 Jun 13 16:17 dev
drwxr-xr-x   1 root root 4096 Jun 13 16:17 etc
drwxr-xr-x   2 root root 4096 Mar 28 09:12 home
drwxr-xr-x   1 root root 4096 Jun 10 00:00 lib
drwxr-xr-x   2 root root 4096 Jun 10 00:00 lib64
drwxr-xr-x   2 root root 4096 Jun 10 00:00 media
drwxr-xr-x   2 root root 4096 Jun 10 00:00 mnt
drwxr-xr-x   2 root root 4096 Jun 10 00:00 opt
dr-xr-xr-x 144 root root    0 Jun 13 16:17 proc
drwx------   1 root root 4096 Jun 11 08:07 root
drwxr-xr-x   3 root root 4096 Jun 10 00:00 run
drwxr-xr-x   1 root root 4096 Jun 11 00:30 sbin
drwxr-xr-x   2 root root 4096 Jun 10 00:00 srv
dr-xr-xr-x  13 root root    0 Jun 13 15:46 sys
drwxrwxrwt   1 root root 4096 Jun 11 00:30 tmp
drwxr-xr-x   1 root root 4096 Jun 10 00:00 usr
drwxr-xr-x   1 root root 4096 Jun 10 00:00 var
Removing intermediate container ac2e849a757e
 ---> 50062f08e279
Step 3/6 : RUN pwd
 ---> Running in f79599959874
/
Removing intermediate container f79599959874
 ---> 8af3de2e5e58
Step 4/6 : COPY . app/
 ---> 32d77a7cf452
Step 5/6 : RUN dotnet --version
 ---> Running in f1f83285eff2
2.2.300
Removing intermediate container f1f83285eff2
 ---> f0bb4891b002
Step 6/6 : ENTRYPOINT ["dotnet", "app/simple-dotnet-api.dll"]
 ---> Running in 3978dee3fdcf
Removing intermediate container 3978dee3fdcf
 ---> af95f20afbbe
Successfully built af95f20afbbe
Successfully tagged simpledotnetapi:latest

1 Ответ

1 голос
/ 15 июня 2019

Использование RUN pwd внутри Dockerfile приведет к печати текущего рабочего каталога изображения, а не каталога, в котором расположен Dockerfile.

При запуске docker build вы переходите в контекст сборки. В вашем случае, когда вы используете docker build --no-cache -t simpledotnetapi ., . (текущий каталог) является контекстом для сборки. COPY /source /destination будет искать source в корне контекста сборки и попытаться скопировать его в /destination внутри контейнера.

Используя аналогию, запуск docker build аналогичен использованию удаленной оболочки для запуска серии инструкций на удаленном компьютере, но с общим каталогом, являющимся контекстом сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...