docker 多容器互联問題 ( php、composer )
我創建了一份dockerFile 與 docker-compose.yml:
Dockerfile
FROM php:7
RUN apt-get update -y && apt-get install -y libmcrypt-dev openssl
RUN docker-php-ext-install pdo mcrypt mbstring
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
WORKDIR /app
COPY . /app
CMD php artisan serve --host=0.0.0.0 --port=8000
EXPOSE 8000
docker-compose.yml
version: '3'
services:
web:
build:
context: .
dockerfile: ./Dockerfile
ports:
- 3021:8000
volumes:
- ./laravel-app:/app
當我執行 docker-compose up --force-recreate -d 之後,laravel app會在127.0.0.1:3021上正確執行。
我在網路上看到很多docker-composer的文章,都是鼓勵將container拆至最小,因此我想問問,有沒有辦法利用php與composer的官方image改寫這份docker-compose.yml?
以下是我做的嘗試:
version: '3'
services:
php:
image: php:7-fpm
ports:
- "3021:8000"
volumes:
- ./laravel-app:/app
composer:
image: composer:latest
volumes:
- ./laravel-app:/app
working_dir: /app
command: ["install","php artisan serve --host=0.0.0.0"]
depends_on:
- php
完成這份docker-compose.yml後,我執行 docker-compose up --force-recreate -d,然而 127.0.0.1:3021 上卻沒有抓取到任何資訊。
我接著執行docker-compose ps 與 docker-compose log,發現 composer 的 container 並未啟動,且有下列的錯誤資訊
Invalid argument php artisan serve --host=0.0.0.0. Use "composer require php artisan serve --host=0.0.0.0" instead to add packages to your composer.json.
請問如何修改?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Dockerfile构建的时候基础镜像用alpine镜像版本的,再把composer构建单独拆成一个阶段(多阶构建)就可以了。
我的意思是说,单纯将container拆到最小是没有意义的,反而可能会在网路数据频繁出入容器时冒出bug或者形成瓶颈。而且之前通过Dockerfile构建+DockerCompose拉起服务的方式就挺好,没必要全写到docker-compose.yml里。另外,有些东西,比如mbstring,基础镜像里本身就有,就没必要再装了,建议你去Docker Store上搜下基础镜像(点Tag能看到构建脚本),然后再选择合适的Tag吧。
docker-compose 互联問題,需要networks
我弄了个lnmp环境docker-compose.yaml你可以按这个去改即可