看起来我的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-stubstests/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如果我在docker-come.yml所在的目录中在cmd.exe中运行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但是,如果我使用-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...我可以看到这里,-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.我试图在docker/compose github问题上寻找一些相关的东西,但没有发现任何问题。
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这方面的任何帮助都是非常感谢的。
发布于 2022-08-16 14:56:09
听起来,您一次构建test_runner映像时,使用的是以前版本的Dockerfile,没有WORKDIR参数,并且尝试使用这个过时的映像重新运行容器。
您必须手动删除图像,或者使用docker-compose build (或docker-compose up --build)而不是docker-compose run强制重建图像。
此外,此链接可能会有所帮助。
发布于 2022-08-16 14:08:02
来自dockerfile的WORKDIR对应于复合文件目录中的working_dir
试着使用
test_runner:
build: tests/DockerImages/testRunner
working_dir: /opt/project/phpstorm-stubs
volumes:
- .:/opt/project/phpstorm-stubs发布于 2022-08-20 20:29:17
你必须了解你整个项目的不同路径。
停靠文件C:\Projects\phpstorm-stubs\的位置
项目/opt/project/phpstorm-stubs的基本位置,所以在现实中,到项目库的确切的整个路径是C:\Projects\phpstorm-stubs\opt\project\phpstorm-stubs,所以它试图查找的文件实际上位于C:\Projects\phpstorm-stubs\opt\project\phpstorm-stubs\usr\local\bin\php tests\Tools\generate-stub-map。
因此,一旦您使用了-f docker-compose.yml,它默认认为您的整个项目位于C:\Projects\phpstorm-stubs\,但是当您将它与-w /opt/project/phpstorm-stubs一起使用时,它知道您的项目路径的基础在这里,所以它知道tests/Tools/generate-stub-map在它前面。
最后,--project-directory要求从当前驱动器的基座到整个路径。
要总结我的答案,您需要使用命令
docker-compose -f docker-compose.yml --project-directory /Projects/phpstorm-stubs/opt/project/phpstorm-stubs run test_runner /usr/local/bin/php tests/Tools/generate-stub-map
https://stackoverflow.com/questions/73052992
复制相似问题