亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將簡單的 Dockerfile 轉換為 docker-compose

將簡單的 Dockerfile 轉換為 docker-compose

PHP
墨色風雨 2024-01-19 20:59:45
我有一個簡單的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。

  1. 一個好的副作用是 Docker 會緩存構建層,因此您無需mysqli每次啟動容器時都等待安裝過程。

  2. 您也可以考慮啟用擴展


查看完整回答
反對 回復 2024-01-19
  • 1 回答
  • 0 關注
  • 307 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號