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需要更多详细信息来批准我的编辑答案 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
会为您提供期望的结果。