首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WORKDIR在Windows上运行停靠-编写运行时不工作

WORKDIR在Windows上运行停靠-编写运行时不工作
EN

Stack Overflow用户
提问于 2022-07-20 13:55:55
回答 3查看 500关注 0票数 6

看起来我的Dockerfile中的WORKDIR不起作用。我正在Windows 10上试用这个,在Mac上也是如此。

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

代码语言:javascript
复制
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

tests/DockerImages/testRunner文件夹只有此Dockerfile:

代码语言:javascript
复制
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,我将得到:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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,但也不起作用:

代码语言:javascript
复制
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输出:

代码语言:javascript
复制
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

这方面的任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-08-16 14:56:09

听起来,您一次构建test_runner映像时,使用的是以前版本的Dockerfile,没有WORKDIR参数,并且尝试使用这个过时的映像重新运行容器。

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

此外,此链接可能会有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2022-08-16 14:08:02

来自dockerfile的WORKDIR对应于复合文件目录中的working_dir

试着使用

代码语言:javascript
复制
  test_runner:
    build: tests/DockerImages/testRunner
    working_dir: /opt/project/phpstorm-stubs
    volumes:
      - .:/opt/project/phpstorm-stubs
票数 1
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73052992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档