【问题标题】:Windows 10 Docker : /usr/bin/env: 'php\r': No such file or directoryWindows 10 Docker:/usr/bin/env:'php\r':没有这样的文件或目录
【发布时间】:2018-06-11 00:02:33
【问题描述】:

我有一个 docker-compose.yml 文件,我在其中定义了图像和 php 构建。它是为带有 php、nginx 和带有 postgis 的 postgresql 的 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命令
  • 你有解决办法吗?

标签: php windows docker docker-compose docker-for-windows


【解决方案1】:

我根据这个想出了一个解决方法:https://stackoverflow.com/a/2613834/3257568

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

它现在正在工作:)

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 它们的格式与 Unix 相同!但是Docker不能让php在容器中运行的问题。当我使用它时它适用于 postgresql: docker-compose exec db psql database name -U database user name
    • 因为构建是在 Windows 上使用 docker 构建的,在 Hyper-V 中的 Linux 容器上运行!天哪,这真的很复杂
    • 登录容器并手动执行容器内的命令。
    • docker-compose exec -it engine sh 然后在控制台内尝试bin/console doctrine:schema:create
    • 对不起,它不起作用!它只是向我显示命令错误的帮助
    【解决方案3】:
    1. 解决此类错误的另一个可能方法是将 .gitattribues 文件添加到您的项目中并设置 *.sh text eol=lf(在您的 docker 容器内运行的任何文件扩展名上)。这样,Windows 上的 git 默认值不会弄乱您的 .sh 文件。注意:您需要获取新的 git pull 才能使其正常工作。

    2. 在我的情况下,错误只是运行没有正确权限的 php 脚本。所以你事先chmod它或在开头添加php。例如:php bin/console

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

    【讨论】:

    • 让我生气,这甚至是必要的。 Windows 使用 unix 行尾没有问题,没有人关心,如果你不使用它们,它只会破坏一些东西。让我发疯。
    【解决方案4】:

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

    【讨论】:

    • 我在问题中看不到任何chmod +x,因此这没有提供答案。如果您指的是另一个答案,请指出哪个答案,否则最好解释您为回答问题所遵循的步骤
    【解决方案5】:

    试试这个:

    tr -d '\15' &lt; original_file &gt; converted_file

    在你的情况下:

    tr -d '\15' &lt; bin/console &gt; console

    然后替换这个文件(将文件控制台移动到目录bin)

    对我来说工作:-)

    【讨论】:

      猜你喜欢
      • 2020-04-30
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 2019-09-08
      • 2020-05-26
      • 1970-01-01
      • 2011-04-08
      • 2013-03-11
      相关资源
      最近更新 更多