Windows 10 Docker: /usr/bin/env: 'php\r': 没有那个文件或目录。

20

我有一个docker-compose.yml文件,其中定义了php的镜像和构建。它是为具有php、nginx和postgresql与postgis的Symfony应用程序而制作的:

version: '2'
services: 

 front:
    image: nginx
    ports:
      - "81:80"
    links:
      - "engine:engine"
      - "db:db"
    volumes:
      - ".:/home/docker:ro"
      - "./docker/front/default.conf:/etc/nginx/conf.d/default.conf:ro"

 engine:
    build: ./docker/engine/
    volumes:
      - ".:/home/docker:rw"
      - "./docker/engine/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro"
    links:
      - "db:db"
    working_dir: "/home/docker"



  db:
    image: camptocamp/postgres:9.6
    ports:
      - "5433:5432"
    environment:
      - "POSTGRES_DB=pfe"
      - "POSTGRES_PASSWORD=admin"
      - "POSTGRES_USER=admin"
      - "PGDATA=/var/lib/postgresql/data/pgdata"

在Ubuntu上一切正常,但当我尝试在Windows 10上运行相同的环境时,出现了错误。

docker-compose exec engine bin/console doctrine:schema:create
    /usr/bin/env: 'php\r': No such file or directory

也许在您的Windows环境变量中未定义php命令。 - Vincent G
你有解决方案吗? - Maicon Carraro
5个回答

24

我根据这个方法找到了解决方案:https://dev59.com/9nE85IYBdhLWcg3wyGl_#2613834

tr -d '\015' <DOS-file >UNIX-file

所以,我做了这件事:

$ docker exec -it <container> bash
$ cd bin
$ tr -d '\015' <console >console.new
$ mv console console.old
$ mv console.new console

现在它正在运行中 :)


12

从错误消息来看,您似乎遇到了与EOL相关的问题。

尝试将脚本/文件转换为UNIX格式的EOL。

您可以使用Sublime / Notepadd++或任何支持此功能的编辑器。
或者在Unix平台上,您可以尝试dos2unix


1
它们是为Unix格式化的!但Docker无法在容器中运行php是一个问题。当我使用以下命令时,对于postgresql它有效:docker-compose exec db psql 数据库名称 -U 数据库用户名 - Salim Ben Aissa
请登录到容器中并手动执行容器内的命令。 - fly2matrix
1
docker-compose exec -it engine sh and then inside console try bin/console doctrine:schema:create - fly2matrix
抱歉,它不起作用!它只是显示了帮助信息,因为命令错误。 - Salim Ben Aissa
让我们在聊天中继续这个讨论 - fly2matrix
显示剩余3条评论

5
  1. 解决这种错误的另一种可能方法是将 .gitattribues 文件添加到您的项目中,并设置 *.sh text eol=lf(在任何在 docker 容器中运行的文件扩展名上设置)。这样,Windows 下的 git 默认不会干扰您的 .sh 文件。注意:为使此方法生效,您需要执行 git pull 获取最新代码。

  2. 在我的情况下,错误仅仅是因为我运行的 php 脚本没有足够的权限,所以你需要先使用 chmod 命令或在命令开头添加 php。例如:php bin/console

两个问题都可能导致相同的错误。


3
让我生气的是这甚至还需要。Windows使用Unix换行符没有问题,没人在意,只有当你不使用它们时才会出问题。让我感到很烦恼。 - Brad

1
尝试这个: -d '\15' < original_file > converted_file 在你的情况下: -d '\15' < bin/console > console 接下来替换这个文件(将console文件移动到bin目录中)。
对我有用 :-)

还有别忘了将文件设置为可执行:chmod +x bin/console - undefined

1
在我的情况下,删除chmod +x转换,而是在产生错误的命令开头添加php

我在问题中没有看到任何chmod +x,因此这并不是对它的回答。如果你是在提到另一个答案,请指出是哪一个,否则最好解释一下你已经采取了哪些步骤来回答这个问题。 - gogaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接