我有一個簡單的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條經驗 獲得超8個贊
您的原始 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 關注
- 307 瀏覽
添加回答
舉報
0/150
提交
取消