docker 多容器互联問題 ( php、composer )

发布于 2022-09-07 23:09:53 字数 1823 浏览 26 评论 0

我創建了一份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 psdocker-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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鹿港小镇 2022-09-14 23:09:53

Dockerfile构建的时候基础镜像用alpine镜像版本的,再把composer构建单独拆成一个阶段(多阶构建)就可以了。


我的意思是说,单纯将container拆到最小是没有意义的,反而可能会在网路数据频繁出入容器时冒出bug或者形成瓶颈。而且之前通过Dockerfile构建+DockerCompose拉起服务的方式就挺好,没必要全写到docker-compose.yml里。另外,有些东西,比如mbstring,基础镜像里本身就有,就没必要再装了,建议你去Docker Store上搜下基础镜像(点Tag能看到构建脚本),然后再选择合适的Tag吧。

昨迟人 2022-09-14 23:09:53

docker-compose 互联問題,需要networks

我弄了个lnmp环境docker-compose.yaml你可以按这个去改即可

version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 80:80
    networks:
      - lnmp
    volumes:
      - ./wwwroot:/usr/local/nginx/html

  php:
    hostname: php
    build:
      context: ./php
      dockerfile: Dockerfile
    networks:
      - lnmp
    volumes:
      - ./wwwroot:/usr/local/nginx/html

  mysql:
    hostname: mysql
    image: mysql:5.6
    ports:
      - 3306:3306
    networks:
      - lnmp
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/data:/var/lib/mysql
    command: --character-set-server=utf8
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: admin
      MYSQL_USER: admin
      MYSQL_PASSWORD: admin123456

networks:
  lnmp: 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文