Dockerfile不安装RUN依赖项

时间:2018-12-04 17:57:03

标签: php docker docker-compose dockerfile

docker-compose.yml

  version: '3.7'
  services:
    php:
      build:
        context: .
        dockerfile: Dockerfile
      image: php:7.3-rc-fpm
      container_name: php_7.3-rc-fpm
      volumes:
        - .:/var/www/app
      restart: unless-stopped
      working_dir: /var/www
      stdin_open: true
      tty: true

Dockerfile

FROM php:7.3-rc-fpm

RUN apt-get update && apt-get install -y \
  build-essential \
  mysql-client \
  locales \
  zip \
  vim \
  unzip \
  git \
  curl


# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip pcntl

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Copy existing application directory permissions
COPY --chown=www:www . /var/www

# Change current user to www
USER www

起始容器

docker-compose up -d

当我执行

docker-compose exec php bash

之后

mysql --version

导致

bash: mysql: command not found

mysql-client丢失了,其他的也正在运行安装...

知道发生了什么吗?

....并且当我没有任何............

时,stackoverflow需要更多详细信息来批准我的编辑

2 个答案:

答案 0 :(得分:2)

您正在滥用容器映像名称。在您的docker-compose.yml中,您说:

services:
    php:
      build:
        context: .
        dockerfile: Dockerfile
      image: php:7.3-rc-fpm

您要构建自己的映像并将其命名为 php:7.3-rc-fpm !但这不是您图像的名称-这是一个著名的php docker容器的名称!并且在您的Dockerfile中继承自它:

FROM php:7.3-rc-fpm

因此,您覆盖的是公众形象,但属于您自己的形象。我只能猜测,新形象会是什么样。 解决方案-从image文件中删除docker-compose。它不是要使用的图像,而是要与build属性一起使用时要在构建后赋予图像的名称。

答案 1 :(得分:1)

image: php:7.3-rc-fpm应该被删除。

它告诉docker-compose是从“ php_7.3-rc-fpm”映像构建的,而不是从Dockerfile的映像构建的(这是优先级的问题)。因此,正常情况下,您要求安装在Dockerfile中的任何内容都不可用...

经过测试,我确实可以确定,如果您删除此行,则命令docker-compose exec php bash后跟mysql --version会为您提供期望的结果。