【问题标题】:A Dockerfile doesn't install RUN dependenciesDockerfile 不安装 RUN 依赖项
【发布时间】:2018-12-04 17:57:02
【问题描述】:

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 丢失,其他 RUN 安装也...

知道发生了什么吗?

....当我没有任何内容时,stackoverflow 需要更多详细信息来批准我的编辑......

【问题讨论】:

  • 不应该是docker exec php bash吗?
  • bash 工作正常
  • 可以给我们整个过程吗?您是如何使用 docker-compose 启动 php 服务的?当前目录结构如何?
  • @godot 编辑了我的帖子

标签: php docker docker-compose dockerfile


【解决方案1】:

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

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

我确实测试过,如果您删除此行,docker-compose exec php bash 后跟 mysql --version 的命令会给您带来预期的结果。

【讨论】:

  • 小记,如果你看this docker doc,你会发现它说了一些矛盾的东西:> "如果你指定图像以及构建,那么 Compose 用 webapp 和可选的方式命名构建的图像图像中指定的标签”。但这不是我的经验(我之前已经注意到了)。也许有些东西我没有得到或者文档不是最新的......
【解决方案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

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

【讨论】:

    猜你喜欢
    • 2021-07-30
    • 2020-12-27
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2021-10-15
    • 2015-04-01
    • 2022-01-15
    相关资源
    最近更新 更多