Php 停靠命令行应用程序
我使用symfony 3.4创建了一个命令行应用程序,它不需要显示任何网页 我通常运行以下命令: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
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 imagephp: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 imagephp: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 Composevolumes:
选项将主机目录内容装载到容器中,使其可见。@DavidMaze。我是个新码头工人。您能告诉我docker-compose.yml文件应该是什么样子吗?docker容器需要在中定义一个长时间运行的进程才能保持运行php cli
并非如此。您需要一个docker run-v
选项或docker Composevolumes:
选项将主机目录内容装载到容器中,使其可见。@DavidMaze。我是个新码头工人。你能告诉我docker-compose.yml文件应该是什么样子吗?