如何让PHP-CLI容器在不需要任何PHP脚本的情况下运行?

我一直在尝试使用Docker和Docker Compose构build一个PHP cli容器,并且希望保持活动状态,而不需要在其中运行任何PHP脚本。

我已经尝试了我自己的Dockerfile

 FROM ubuntu:16.04 ENV PATH="/root/.composer/vendor/bin:${PATH}" RUN apt-get update && \ apt-get -y -qq install software-properties-common \ xvfb \ locales && \ locale-gen en_US.UTF-8 && \ export LC_ALL=en_US.UTF-8 && \ export LANG=en_US.UTF-8 && \ add-apt-repository ppa:ondrej/php && \ apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get -y --allow-unauthenticated install \ php7.1-curl \ php7.1-cli \ php7.1-bcmath \ php7.1-json \ php7.1-intl \ php7.1-mbstring \ php7.1-mcrypt \ php7.1-mysql \ php7.1-xml \ php7.1-xsl \ php7.1-zip \ curl \ git \ wget \ pkg-config && \ apt-get clean && \ apt-get autoremove && \ rm -rf /var/lib/apt/lists/* COPY config / RUN sh /usr/local/bin/install.sh ENTRYPOINT bash -C '/entrypoint.sh';'bash' CMD ["php", "-a"] 

还有另一个(从主要的PHP图像扩展):

 FROM php:7-cli-alpine ENV PATH="/root/.composer/vendor/bin:${PATH}" COPY config / RUN sh /usr/local/bin/install.sh WORKDIR /var/wwww CMD ["php", "-a"] 

docker-compose.yml只有这个:

 version: '3.3' services: webserver: build: context: . restart: on-failure env_file: .env environment: UID: ${UID} GID: ${GID} 

最后,如果你想尝试一下, 这里是一切的完整仓库。

问题是什么? 通过运行docker-compose up --build --force-recreate构build容器docker-compose up --build --force-recreate用代码0退出,但是docker-composer logs没有任何帮助,因为它什么都没说。

看看命令行中的以下输出(对于这篇文章中的第二个Dockerfile,对于第一个和更多的东西几乎是一样的):

 $ docker-compose up --build --force-recreate Building webserver Step 1/6 : FROM php:7-cli-alpine 7-cli-alpine: Pulling from library/php 90f4dba627d6: Pull complete 623a0217e4bc: Pull complete ecbf507e7e3c: Pull complete 79a82dee0025: Pull complete 457716c6bb05: Pull complete 62e36287ffd0: Pull complete 507e98c003bc: Pull complete b25e699baa37: Pull complete Digest: sha256:ecae911bd22279d4883ffdc631afddc434641c67eedf49914fc62dafb5329663 Status: Downloaded newer image for php:7-cli-alpine ---> 1e563ea5f552 Step 2/6 : ENV PATH "/root/.composer/vendor/bin:${PATH}" ---> Running in 29b65c1d7def ---> d11c62bb5cf5 Removing intermediate container 29b65c1d7def Step 3/6 : COPY config / ---> e42022d1de91 Step 4/6 : RUN sh /usr/local/bin/install.sh ---> Running in 749230f42e9e All settings correct for using Composer Downloading... Composer (version 1.5.2) successfully installed to: /usr/local/bin/composer Use it: php /usr/local/bin/composer Changed current directory to /root/.composer Loading composer repositories with package information Updating dependencies Package operations: 21 installs, 0 updates, 0 removals - Installing hirak/prestissimo (0.3.7): Downloading (100%) - Installing symfony/stopwatch (v3.3.10): Downloading (100%) - Installing symfony/process (v3.3.10): Downloading (100%) - Installing symfony/polyfill-php72 (v1.5.0): Downloading (100%) - Installing paragonie/random_compat (v2.0.11): Downloading (100%) - Installing symfony/polyfill-php70 (v1.5.0): Downloading (100%) - Installing symfony/options-resolver (v3.3.10): Downloading (100%) - Installing symfony/finder (v3.3.10): Downloading (100%) - Installing symfony/filesystem (v3.3.10): Downloading (100%) - Installing symfony/event-dispatcher (v3.3.10): Downloading (100%) - Installing psr/log (1.0.2): Downloading (100%) - Installing symfony/debug (v3.3.10): Downloading (100%) - Installing symfony/polyfill-mbstring (v1.5.0): Downloading (100%) - Installing symfony/console (v3.3.10): Downloading (100%) - Installing php-cs-fixer/diff (v1.1.0): Downloading (100%) - Installing gecko-packages/gecko-php-unit (v2.2): Downloading (100%) - Installing doctrine/lexer (v1.0.1): Downloading (100%) - Installing doctrine/annotations (v1.5.0): Downloading (100%) - Installing composer/semver (1.4.2): Downloading (100%) - Installing friendsofphp/php-cs-fixer (v2.7.1): Downloading (100%) - Installing squizlabs/php_codesniffer (3.1.0): Downloading (100%) Writing lock file Generating optimized autoload files Cache directory does not exist (cache-vcs-dir): Clearing cache (cache-repo-dir): /root/.composer/cache/repo Clearing cache (cache-files-dir): /root/.composer/cache/files Clearing cache (cache-dir): /root/.composer/cache All caches cleared. ---> ff310362f4a5 Removing intermediate container 749230f42e9e Step 5/6 : WORKDIR /var/wwww ---> fe10fd52d6b6 Removing intermediate container 6e472a693c0c Step 6/6 : CMD php -a ---> Running in 789688d1346a ---> b1286e96580b Removing intermediate container 789688d1346a Successfully built b1286e96580b Successfully tagged dockerlamp_webserver:latest Recreating dockerlamp_webserver_1 ... Recreating dockerlamp_webserver_1 ... done Attaching to dockerlamp_webserver_1 webserver_1 | Interactive shell webserver_1 | dockerlamp_webserver_1 exited with code 0 $ docker-compose logs Attaching to dockerlamp_webserver_1 webserver_1 | Interactive shell webserver_1 | 

如何保持容器运行而不需要运行PHP脚本?

注意:你可能会问,为什么不build立php-fpm|apache但是我不需要任何web服务器,因为容器只用于命令行项目(这是一个WIP)

你正在运行php -a这是一个REPL,它需要交互式的TTY。 所以你需要启用你的撰写

 version: '3.3' services: webserver: build: context: . restart: on-failure env_file: .env environment: UID: ${UID} GID: ${GID} tty: true stdin_open: true 

后来如果你需要附加到它来运行命令,你将需要使用docker

 docker attach <containernameOrID>