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

Sal*_*ssa 11 php windows docker docker-compose docker-for-windows

我有一个 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"
Run Code Online (Sandbox Code Playgroud)

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

docker-compose exec engine bin/console doctrine:schema:create
    /usr/bin/env: 'php\r': No such file or directory
Run Code Online (Sandbox Code Playgroud)

Mai*_*aro 14

我想出了一种解决方法:https : //stackoverflow.com/a/2613834/3257568

tr -d '\015' <DOS-file >UNIX-file
Run Code Online (Sandbox Code Playgroud)

所以,我这样做了:

$ docker exec -it <container> bash
$ cd bin
$ tr -d '\015' <console >console.new
$ mv console console.old
$ mv console.new console
Run Code Online (Sandbox Code Playgroud)

它现在正在工作:)


fly*_*rix 8

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

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

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


Alf*_*red 6

  1. 解决此类错误的另一种可能方法是将 .gitattribues 文件添加到您的项目中并设置*.sh text eol=lf(在 docker 容器内运行的任何文件扩展名上)。这样,Windows 上的 git 默认值就不会弄乱您的 .sh 文件。注意:你需要获取新的 git pull 才能使其工作。

  2. 就我而言,错误只是运行没有正确权限的 php 脚本。所以你事先 chmod 它或php在开头添加。前任:php bin/console

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

  • 让我生气的是,这是必要的。Windows 使用 unix 行结尾没有问题,没有人关心,而且如果你不使用它们,它只会破坏东西。让我疯狂。 (3认同)