我有一个简单的Dockerfile配置php:7.2-fpm正在引用它docker-compose.yml。我想删除Dockerfile位于php/Dockerfile并将命令集成到我的docker-compose-yml文件中。这是我的php/Dockerfile:FROM php:7.2-fpm
RUN docker-php-ext-install mysqli这是我的docker-compose.yml,它启动了 php-fpm、nginx、letencrypt certbot、mysql 和 phpmyadmin:version: '3'services: php: container_name: dev_php build: context: ./php ports: - 9000:9000 volumes: - ./website:/website - ./php/www.conf:/usr/local/etc/php-fpm.d/www.conf environment: MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} nginx: container_name: dev_nginx image: nginx:1.13.8 ports: - 80:80 - 443:443 volumes: - ./website:/website - ./nginx/default.conf:/etc/nginx/conf.d/default.conf - ./certbot/conf:/etc/letsencrypt - ./certbot/www:/var/www/certbot depends_on: - php - mysql command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'" certbot: container_name: dev_certbot image: certbot/certbot volumes: - ./certbot/conf:/etc/letsencrypt - ./certbot/www:/var/www/certbot entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'" mysql: container_name: dev_mysql image: mysql:5.7 ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} volumes: - ./mysql:/docker-entrypoint-initdb.d由于我的php/Dockerfile比较简单,我想我可以这样做:但这是行不通的。当我使用我的项目启动时,docker-compose up我可以看到dev_php(PHP 容器的名称)执行了一堆我通常不会看到的任务,然后它继续安装,mysqli但在使用exit code 0.想法?
1 回答
largeQ
TA贡献2039条经验 获得超7个赞
您的原始 Dockerfile 不仅仅只是安装扩展mysqli
。
它的入口点如源代码所示
它还具有如下所示的命令
这些入口点和命令将启动容器并保持其运行
现在回到您的修改:
我可以看到 dev_php (PHP 容器的名称)执行了一堆我通常不会看到的任务
这是 的输出docker-php-ext-install mysqli
。你之前没有看到它是因为它是在构建 docker 镜像时完成的。
退出后立即退出,退出代码为 0
这是预期的,因为命令已完成处理,没有其他事情可做。
为了保持容器运行,您必须手动添加原始入口点和命令。像这样的事情:
php: container_name: dev_php image: php:7.2-fpm ports: - 9000:9000 volumes: - ./website:/website - ./php/www.conf:/usr/local/etc/php-fpm.d/www.conf environment: MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} entrypoint: - bash - -c command: - | docker-php-ext-install mysqli; \ docker-php-entrypoint php-fpm
我尚未进行测试来确认语法 100% 正确,但您应该明白了。重要的是docker-php-entrypoint php-fpm
我的建议是在这种情况下坚持使用 Dockerfile。
一个好的副作用是 Docker 会缓存构建层,因此您无需
mysqli
每次启动容器时都等待安装过程。您也可以考虑启用扩展
- 1 回答
- 0 关注
- 212 浏览
添加回答
举报
0/150
提交
取消