在 Windows 上运行 docker-compose run 时 WORKDIR 不起作用

Dmi*_*rii 6 docker docker-compose

我的 Dockerfile 中的 WORKDIR 似乎不起作用。我正在 Windows 10 上尝试此操作。在 Mac 上同样可以完美运行。

这是我的项目文件:docker-compose.yml:

version: '3'
services:
  php_under_test:
    build: tests/DockerImages/${PHP_VERSION}
    volumes:
      - .:/opt/project/phpstorm-stubs
  test_runner:
    build: tests/DockerImages/testRunner
    volumes:
      - .:/opt/project/phpstorm-stubs
Run Code Online (Sandbox Code Playgroud)

tests/DockerImages/testRunner文件夹只有这个 Dockerfile:

FROM php:8.1-apache

RUN echo 'memory_limit = 1024M' >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini
COPY --from=composer /usr/bin/composer /usr/bin/composer

RUN apt-get update && apt-get -y install git zip unzip

WORKDIR /opt/project/phpstorm-stubs
Run Code Online (Sandbox Code Playgroud)

如果我docker-compose -f docker-compose.yml run test_runner /usr/local/bin/php tests/Tools/generate-stub-map在 docker-compose.yml 所在目录中的 cmd.exe 中运行,我会得到:

C:\Projects\phpstorm-stubs>docker-compose -f docker-compose.yml run test_runner /usr/local/bin/php tests/Tools/generate-stub-map
WARNING: The PHP_VERSION variable is not set. Defaulting to a blank string.
Creating phpstorm-stubs_test_runner_run ... done
Could not open input file: tests/Tools/generate-stub-map
ERROR: 1
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用-w: docker-compose -f docker-compose.yml run -w /opt/project/phpstorm-stubs test_runner /usr/local/bin/php tests/Tools/generate-stub-map- 运行相同的操作,那就行了。输出:

C:\Projects\phpstorm-stubs>docker-compose -f docker-compose.yml run -w /opt/project/phpstorm-stubs test_runner /usr/local/bin/php tests/Tools/generate-stub-map
WARNING: The PHP_VERSION variable is not set. Defaulting to a blank string.
Creating phpstorm-stubs_test_runner_run ... done
Parsing "/opt/project/phpstorm-stubs/tests/Tools/../../aerospike/aerospike.php"
Parsing "/opt/project/phpstorm-stubs/tests/Tools/../../aerospike/Bytes.php"
etc...
Run Code Online (Sandbox Code Playgroud)

我可以看到这里已经-w过时了,我应该使用它--project-directory,但也不起作用:

C:\Projects\phpstorm-stubs>docker-compose -f docker-compose.yml --project-directory /opt/project/phpstorm-stubs run test_runner /usr/local/bin/php 
tests/Tools/generate-stub-map
WARNING: The PHP_VERSION variable is not set. Defaulting to a blank string.
ERROR: build path C:\opt\project\phpstorm-stubs\tests\DockerImages either does not exist, is not accessible, or is not a valid URL.
Run Code Online (Sandbox Code Playgroud)

我试图在docker/composegithub issues 上寻找相关的内容,但没有找到。

docker version输出:

Client:
 Cloud integration: v1.0.24
 Version:           20.10.17
 API version:       1.41
 Go version:        go1.17.11
 Git commit:        100c701
 Built:             Mon Jun  6 23:09:02 2022
 OS/Arch:           windows/amd64
 Context:           default
 Experimental:      true

Server: Docker Desktop 4.10.1 (82475)
 Engine:
  Version:          20.10.17
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.17.11
  Git commit:       a89b842
  Built:            Mon Jun  6 23:01:23 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.6
  GitCommit:        10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
 runc:
  Version:          1.1.2
  GitCommit:        v1.1.2-0-ga916309
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
Run Code Online (Sandbox Code Playgroud)

非常感谢任何对此的帮助。

rzl*_*vmp 2

听起来好像您使用以前的版本(不带参数)构建了test_runner图像,并尝试使用这个过时的图像重新运行容器。DockerfileWORKDIR

您必须手动删除图像或使用docker-compose build(或docker-compose up --build)而不是强制重建它docker-compose run

此链接也可能有帮助