【发布时间】:2019-03-18 10:30:18
【问题描述】:
我有一个运行一些服务的 docker-compose 文件。
services:
cli:
build:
context: .
dockerfile: docker/cli/Dockerfile
volumes:
- ./drupal8site:/var/www/html/drupal8site
drupal:
container_name: drupal
build:
context: .
dockerfile: docker/DockerFile.drupal
args:
DOC_ROOT: /var/www/html/drupal8site
ports:
- 80:80
volumes:
- ./drupal8site:/var/www/html/drupal8site
restart: always
environment:
APACHE_DOCUMENT_ROOT: /var/www/html/drupal8site/web
mysql:
image: mysql:5.7
ports:
- 3306:3306
volumes:
- ./mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
我想添加另一个服务,它是一个容器,我可以在其中运行 CLI 命令(composer、drush for drupal、php 等)。
以下 Dockerfile 是我最初定义 cli 服务的方式,但它在运行后立即停止。如何定义它,使它成为我的 docker-compose 的一部分,共享我安装的卷,并且我可以交互地连接到它并在其上运行 CLI 命令?
FROM php:7.2-cli
#various programs
RUN apt-get update \
&& apt-get install vim --assume-yes \
&& apt-get install git --assume-yes \
&& apt-get install mysql-client --assume-yes
CMD ["bash"]
谢谢, 亚龙
【问题讨论】:
-
你 cli 的目的是什么:执行针对 mysql 和 drupal 的查询(通过命令行),或者拥有一个容器,该容器还将存储一些额外的功能,这些功能将使用以前的服务?你的 CMD 在这里用 bash 不能工作,因为它不是交互式的......但在我继续之前,请回答第一个问题
-
我怀疑我的 CMD 错误。我只是不知道我是否应该放一个CMD。 CLI 容器的目的是运行各种命令:composer 需要安装卷上的包,该数据库中的 sqldump,清除 drupal 缓存等。我的问题是如何定义一个不需要在其中运行进程的容器背景,但我以交互方式使用,但被定义为我的 docker-compose 文件的一部分。
标签: docker docker-compose