Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 停靠命令行应用程序_Php_Docker_Symfony_Docker Compose - Fatal编程技术网

Php 停靠命令行应用程序

Php 停靠命令行应用程序,php,docker,symfony,docker-compose,Php,Docker,Symfony,Docker Compose,我使用symfony 3.4创建了一个命令行应用程序,它不需要显示任何网页 我通常运行以下命令: php bin/console MY_COMMAND_NAME version: "3.3" services: web: image: php:7.3-cli 我想对应用程序进行dockerize并与其他人共享,因此在我的项目的根目录中,我创建了一个docker compose.yml文件,如下所示: php bin/console MY_COMMAND_NAME v

我使用symfony 3.4创建了一个命令行应用程序,它不需要显示任何网页

我通常运行以下命令:

php bin/console MY_COMMAND_NAME
version: "3.3"
services:
    web:
        image: php:7.3-cli
我想对应用程序进行dockerize并与其他人共享,因此在我的项目的根目录中,我创建了一个docker compose.yml文件,如下所示:

php bin/console MY_COMMAND_NAME
version: "3.3"
services:
    web:
        image: php:7.3-cli
然后我运行docker compose up,然后通过以下命令检查PHP版本,它显示了正确的版本:

docker run php:7.3-cli php -v
但是,当我运行docker ps时,它没有显示任何正在运行的容器

我的问题是如何在我的项目根目录中运行这些命令。仅供参考,我正在windows 10 Home Edition上使用Docker工具箱,我的项目位置是:

C:\Users\{my_user_name}\Desktop\folder_1\folder_2

docker容器需要在中定义一个长时间运行的进程才能保持运行。php cli并非如此。如果运行
composer up
,您将看到如下内容:

$ docker-compose up

Creating network "tempphpdocker_default" with the default driver
Pulling web (php:7.3-cli)...
7.3-cli: Pulling from library/php
b8f262c62ec6: Pull complete
a98660e7def6: Pull complete
4d75689ceb37: Pull complete
639eb0368afa: Pull complete
2cdbfdb779b1: Pull complete
e0b637fa9606: Pull complete
da7333b0ef25: Pull complete
01d65ff46009: Pull complete
673e50bed3b9: Pull complete
bf6c6e34305d: Pull complete
Digest: sha256:1453f5ef0d4d1d424ed8114dd90a775bdec06cc6fb3bbae9521dcb4ca0c8ca90
Status: Downloaded newer image for php:7.3-cli
Creating tempphpdocker_web_1 ... 
Creating tempphpdocker_web_1 ... done
Attaching to tempphpdocker_web_1
web_1  | Interactive shell
web_1  | 
tempphpdocker_web_1 exited with code 0
FROM php:7.3-cli

RUN mkdir -p /opt/workdir/bin
RUN mkdir -p /opt/workdir/vendor

COPY bin/ /opt/workdir/bin
COPY vendor/ /opt/workdir/vendor

WORKDIR /opt/workdir
CMD php ./bin/console COMMAND
退出代码为0。这意味着docker image
php:7.3-cli
中的命令已成功运行并完成

要正确地对应用程序进行docker化,您应该编写自己的docker文件,并使用适当的调用将CLI程序绑定到其中,从而覆盖该文件。您的
Dockerfile
应该是这样的:

$ docker-compose up

Creating network "tempphpdocker_default" with the default driver
Pulling web (php:7.3-cli)...
7.3-cli: Pulling from library/php
b8f262c62ec6: Pull complete
a98660e7def6: Pull complete
4d75689ceb37: Pull complete
639eb0368afa: Pull complete
2cdbfdb779b1: Pull complete
e0b637fa9606: Pull complete
da7333b0ef25: Pull complete
01d65ff46009: Pull complete
673e50bed3b9: Pull complete
bf6c6e34305d: Pull complete
Digest: sha256:1453f5ef0d4d1d424ed8114dd90a775bdec06cc6fb3bbae9521dcb4ca0c8ca90
Status: Downloaded newer image for php:7.3-cli
Creating tempphpdocker_web_1 ... 
Creating tempphpdocker_web_1 ... done
Attaching to tempphpdocker_web_1
web_1  | Interactive shell
web_1  | 
tempphpdocker_web_1 exited with code 0
FROM php:7.3-cli

RUN mkdir -p /opt/workdir/bin
RUN mkdir -p /opt/workdir/vendor

COPY bin/ /opt/workdir/bin
COPY vendor/ /opt/workdir/vendor

WORKDIR /opt/workdir
CMD php ./bin/console COMMAND
您只需构建并运行此
Dockerfile
,或者,如果您喜欢
docker compose
,您可以在Dockerfile所在的文件夹中定义
docker compose.yml

version: "3.3"
services:
    web:
        image: php-custom
        build: ./

请注意,已停靠的应用程序只能访问docker映像中的文件和文件夹。您应该先将本地文件系统的一部分绑定到容器,然后它才能在文件系统上实际工作。

docker容器需要在中定义一个长时间运行的进程才能保持运行。php cli并非如此。如果运行
composer up
,您将看到如下内容:

$ docker-compose up

Creating network "tempphpdocker_default" with the default driver
Pulling web (php:7.3-cli)...
7.3-cli: Pulling from library/php
b8f262c62ec6: Pull complete
a98660e7def6: Pull complete
4d75689ceb37: Pull complete
639eb0368afa: Pull complete
2cdbfdb779b1: Pull complete
e0b637fa9606: Pull complete
da7333b0ef25: Pull complete
01d65ff46009: Pull complete
673e50bed3b9: Pull complete
bf6c6e34305d: Pull complete
Digest: sha256:1453f5ef0d4d1d424ed8114dd90a775bdec06cc6fb3bbae9521dcb4ca0c8ca90
Status: Downloaded newer image for php:7.3-cli
Creating tempphpdocker_web_1 ... 
Creating tempphpdocker_web_1 ... done
Attaching to tempphpdocker_web_1
web_1  | Interactive shell
web_1  | 
tempphpdocker_web_1 exited with code 0
FROM php:7.3-cli

RUN mkdir -p /opt/workdir/bin
RUN mkdir -p /opt/workdir/vendor

COPY bin/ /opt/workdir/bin
COPY vendor/ /opt/workdir/vendor

WORKDIR /opt/workdir
CMD php ./bin/console COMMAND
退出代码为0。这意味着docker image
php:7.3-cli
中的命令已成功运行并完成

要正确地对应用程序进行docker化,您应该编写自己的docker文件,并使用适当的调用将CLI程序绑定到其中,从而覆盖该文件。您的
Dockerfile
应该是这样的:

$ docker-compose up

Creating network "tempphpdocker_default" with the default driver
Pulling web (php:7.3-cli)...
7.3-cli: Pulling from library/php
b8f262c62ec6: Pull complete
a98660e7def6: Pull complete
4d75689ceb37: Pull complete
639eb0368afa: Pull complete
2cdbfdb779b1: Pull complete
e0b637fa9606: Pull complete
da7333b0ef25: Pull complete
01d65ff46009: Pull complete
673e50bed3b9: Pull complete
bf6c6e34305d: Pull complete
Digest: sha256:1453f5ef0d4d1d424ed8114dd90a775bdec06cc6fb3bbae9521dcb4ca0c8ca90
Status: Downloaded newer image for php:7.3-cli
Creating tempphpdocker_web_1 ... 
Creating tempphpdocker_web_1 ... done
Attaching to tempphpdocker_web_1
web_1  | Interactive shell
web_1  | 
tempphpdocker_web_1 exited with code 0
FROM php:7.3-cli

RUN mkdir -p /opt/workdir/bin
RUN mkdir -p /opt/workdir/vendor

COPY bin/ /opt/workdir/bin
COPY vendor/ /opt/workdir/vendor

WORKDIR /opt/workdir
CMD php ./bin/console COMMAND
您只需构建并运行此
Dockerfile
,或者,如果您喜欢
docker compose
,您可以在Dockerfile所在的文件夹中定义
docker compose.yml

version: "3.3"
services:
    web:
        image: php-custom
        build: ./

请注意,已停靠的应用程序只能访问docker映像中的文件和文件夹。您应该先将本地文件系统的一部分绑定到容器,然后它才能在您的文件系统上实际工作。

快速修复要保持容器运行,只需覆盖docker compose中的container命令

version: "3.3"
services:
  web:
    image: php:7.3-cli
    command: tail -f /dev/null

当您运行
docker compose up
时,它将保留docker容器,但它不会做任何事情,只会在容器内运行命令

docker exec -it php-cli_web_1 ash

我的问题是如何在项目根目录中运行命令 目录

正如@David所提到的,您需要将宿主项目装载到docker compose中的容器中

version: "3.3"
services:
  web:
    image: php:7.3-cli
    command: tail -f /dev/null

比如说

您的项目被放置在主机
/home/myporject
上,在docker compose中装载项目,它将在容器中可用。然后可以更新docker compose的命令以运行脚本

记住

容器的寿命就是docker compose命令的寿命

执行完成后,容器将在执行后死亡。因此,您的容器将一直运行,直到
php:7.3-cli/app/your_script.php
此脚本完成

version: "3.3"
services:
  web:
    image: php:7.3-cli
    command: php:7.3-cli /app/your_script.php
    volumes:
      - /home/myporject:/app

快速而肮脏的修复程序可以让您的容器运行,只需覆盖docker compose中的container命令

version: "3.3"
services:
  web:
    image: php:7.3-cli
    command: tail -f /dev/null

当您运行
docker compose up
时,它将保留docker容器,但它不会做任何事情,只会在容器内运行命令

docker exec -it php-cli_web_1 ash

我的问题是如何在项目根目录中运行命令 目录

正如@David所提到的,您需要将宿主项目装载到docker compose中的容器中

version: "3.3"
services:
  web:
    image: php:7.3-cli
    command: tail -f /dev/null

比如说

您的项目被放置在主机
/home/myporject
上,在docker compose中装载项目,它将在容器中可用。然后可以更新docker compose的命令以运行脚本

记住

容器的寿命就是docker compose命令的寿命

执行完成后,容器将在执行后死亡。因此,您的容器将一直运行,直到
php:7.3-cli/app/your_script.php
此脚本完成

version: "3.3"
services:
  web:
    image: php:7.3-cli
    command: php:7.3-cli /app/your_script.php
    volumes:
      - /home/myporject:/app

docker容器需要在中定义一个长时间运行的进程才能保持运行
php cli
并非如此。您需要一个
docker run-v
选项或docker Compose
volumes:
选项将主机目录内容装载到容器中,使其可见。@DavidMaze。我是个新码头工人。您能告诉我docker-compose.yml文件应该是什么样子吗?docker容器需要在中定义一个长时间运行的进程才能保持运行
php cli
并非如此。您需要一个
docker run-v
选项或docker Compose
volumes:
选项将主机目录内容装载到容器中,使其可见。@DavidMaze。我是个新码头工人。你能告诉我docker-compose.yml文件应该是什么样子吗?