为什么命令通过正在运行的容器上的“ EXEC”指令有效运行,而不是通过docker-compose有效运行?

时间:2019-05-06 05:13:02

标签: docker docker-compose

我正在使用以下docker-compose配置来对lemp堆栈进行docker化:

mariadb:
 container_name: lemp-mariadb
 image: mariadb
 #user: $UID
 environment:
  - MYSQL_ROOT_PASSWORD=root.maria
  - MYSQL_DATABASE=wordpress
  - MYSQL_USER=wordpress
  - MYSQL_PASSWORD=wordpress
 volumes:
  - ./db:/var/lib/mysql
phpfpm:
 container_name: lemp-fpm
 image: php:7-fpm
 volumes:
  - ./code:/code
 links:
  - mariadb
 command: docker-php-ext-install mysqli
nginx:
 container_name: lemp-nginx
 image: nginx:latest
 ports:
  - "8080:80"
 volumes:
  - ./code:/code
  - ./site.conf:/etc/nginx/conf.d/default.conf
 links:
  - phpfpm
 command: nginx -g 'daemon off;'

问题在于配置行:

command: docker-php-ext-install mysqli

如果我在docker-compose up例程中对此行进行注释,它可以正常运行,并使3台机器处于运行状态,我所要做的就是通过docker exec在lemp-fpm机器上运行以下命令:

docker exec lemp_phpfpm_1 docker-php-ext-install mysqli

没有错误,我可以使用mysqli扩展名连接到数据库。当通过docker-compose运行同一命令时,lemp-fpm实例以0错误代码退出。问题是为什么?解决方法是什么?enter image description here

1 个答案:

答案 0 :(得分:0)

Docker容器应在指定的“命令”完成后退出。如果您希望容器在命令完成后留下来,请另外提供一些其他命令,例如tail命令保持打开状态。

您的另一种选择是在docker映像构建期间运行“ docker-php-ext-install mysqli”并构建您自己的容器映像。然后,仅使用“ tail -f / dev / null”作为“命令行”运行容器。