在cmd 如果使用docker php的命令执行脚本 php bin/laravels start
执行命令即可: docker run dnmp_php80 php bin/laravels start
docker ps -a | grep dnmp_php

docker ps -a | grep dnmp_php

$ docker exec -it ca3cefe23585 php -v
the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'
出现 "the input device is not a TTY" 的错误通常表明你正在尝试在没有TTY(终端设备)的情况下运行一个需要交互的命令。在Windows环境下,特别是如果你使用的是Git Bash或者MinGW这样的终端,可能需要额外的工具来处理TTY的分配。
错误信息中还提到了 winpty,这是一个工具,可以在Windows的伪终端中运行需要TTY的程序。如果你在MinGW或Git Bash中使用 docker exec -it,你可能需要使用 winpty 前缀来执行需要交互的命令。
winpty docker exec -it ca3cefe23585 php -v

$ winpty docker exec -it ca3cefe23585 bash
OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown
What's next?
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug ca3cefe23585
Learn more at https://docs.docker.com/go/debug-cli/

命令 winpty docker exec -it ca3cefe23585 sh -c 'php /www/allen/xuechuangIM/bin/laravels info && exec sh' 的目的是在 Docker 容器 ca3cefe23585 中执行两个操作:
-
运行
php /www/allen/xuechuangIM/bin/laravels info:这条命令会执行 PHP 脚本/www/allen/xuechuangIM/bin/laravels并传递info参数,可能是为了获取有关 Laravel Swoole 服务器的信息。 -
&& exec sh:在成功执行前面的 PHP 脚本后(即laravels info命令成功返回后),通过&&连接符执行exec sh。这会将当前的 shell 进程替换为一个新的sh进程,从而提供一个交互式 shell,让你能够继续在容器中进行操作。
这里有几个要点需要注意:
-
winpty:这是在 Windows 上使用的一个工具,它允许你在 Windows 的命令行环境中使用 pty(伪终端)兼容的程序,比如 Unix 风格的 shell。这对于在 Windows 上使用 Docker Toolbox 的用户尤为重要,因为 Docker Toolbox 使用的是 Git Bash 或类似的 shell。 -
docker exec -it:docker exec命令用于在正在运行的容器中执行命令。-it选项确保命令以交互模式运行,并分配一个伪终端,以便你可以看到命令的输出并与之交互。 -
sh -c:这允许你在 shell 中执行一个字符串形式的命令。在这种情况下,它执行了 PHP 脚本和一个 shell 替换命令。
总的来说,这条命令首先会打印出 Laravel Swoole 服务器的相关信息,然后为你提供一个可以在容器内部进行交互的 shell。如果你在 Windows 上使用 Docker,并且想要方便地查看 Laravel Swoole 信息并进入容器的 shell 环境,这条命令会非常有用。
更多推荐

所有评论(0)