将主机上的PHP路径设置到Docker容器中

10
我知道这可能是一个愚蠢的问题,但我有以下问题。我使用Docker已经一年了,使用一个编辑器来修改我的程序,它作为一个卷托管。
我没有安装PHP,因为它只在容器内部运行,就像我服务器中的几乎所有其他程序(如SQL、Apache)一样。现在我安装了Visual Studio Code,但它无法找到PHP的路径以使用智能感知。
我知道我可以在docker-compose或Dockerfile中设置环境路径来为我的容器设置环境。但是,容器在运行时被隔离在外部,除了像docker cp这样的命令之外。
是否有可能从主机到容器机设置路径,以便Visual Studio Code可以在容器内找到PHP并将其用于智能感知?或者我必须在我的主机上安装PHP吗?但在我看来,这将破坏对Docker容器的使用。
例如,在Visual Studio Code配置settings.json中:
"php.validate.executablePath": DOCKERCONTAINER/usr/bin/php

假设您在容器中公开了php目录,其中包含所有可执行文件等。如果您将其映射到本地文件夹,则该文件夹的内容将覆盖容器中的内容。如果该文件夹中没有任何内容,则容器目录现在将为空。卷的工作方式不允许从容器映射文件回到主机,这是单向交易。 - rXc3NtR1c
1个回答

26

关键是创建一个Bash文件,调用我们的PHP容器。

首先,使用此docker-compose.yml启动一个PHP7容器并保持其运行状态。

version: "3"
services:  
  python:
    image: php:7.2
    container_name: php7-vscode
    restart: always #this option will keep your container always running, auto start after turn on your host machine
    stdin_open: true
    networks:
      - proxy
networks:
  proxy:
    external: true
在/usr/local/bin中创建名为php的文件。 使用Chmod命令使其可执行。
sudo chmod +x php

这个文件将包含该脚本,使用我们正在运行的容器来处理php

#!/bin/bash
docker exec -i --user=1000:1000 php7-vscode php "$@"

1000:1000是我们在主机上的用户ID和用户组。为了让容器不修改我们文件的所有者,我们必须以当前主机用户身份运行。

就这样。现在你可以输入

php -v

查看结果。


1
谢谢,对于使用Windows的人来说,这是你们的解决方案:将docker exec -i php7-vscode php %*放入一个名为php.bat的文件中。 - mohammad fallah.rasoulnejad
但是现在我发现Composer无法运行,我该怎么办? - mohammad fallah.rasoulnejad
@mohammadfallah.rasoulnejad 我的仍然可用。您需要创建网络代理才能运行我的docker-compose。如果您不想创建它,可以删除网络代理。 - Quinn Wynn
1
哦,所以你在Windows上使用它。在我的教程中,我提到了这一步“在/usr/local/bin中创建一个名为php的文件”。这只适用于Linux。 - Quinn Wynn
1
哦,我刚试了一下,它可以工作!无论如何还是谢谢你。你对这个问题的回答激励了我解决我的问题。 - mohammad fallah.rasoulnejad
显示剩余5条评论

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