Cod*_*rit 1 windows docker docker-compose
我在 Windows 上使用 Docker 并使用以下 docker 文件:
FROM php:7.4-fpm
ARG uid=1000
ARG user=devuser
USER root
# Install system packages
RUN apt-get update && apt-get install -y apt-transport-https && apt-get install -y git curl zip unzip libicu-dev
# Cleanup apt
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install php extensions
RUN docker-php-ext-install pdo_mysql intl iconv
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && chown -R $user:$user /home/$user
# Install composer
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
# Copy project files to image
COPY . /var/www
# Set working directory
WORKDIR /var/www
RUN composer install
# Change user
USER $user
Run Code Online (Sandbox Code Playgroud)
docker-compose.yaml
version: "3.7"
services:
app:
container_name: app
build:
context: ./
dockerfile: Dockerfile
image: php:7.4-fpm
ports:
- 9000:9000
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- dev
depends_on:
- database
server:
container_name: server
image: nginx:1.21.0-alpine
ports:
- 8000:80
volumes:
- ./:/var/www
- ./docker/nginx:/etc/nginx/conf.d
networks:
- dev
database:
container_name: database
image: mariadb:10-bionic
environment:
MYSQL_ROOT_PASSWORD: root
networks:
- dev
volumes:
- database-data:/var/lib/mysql
volumes:
database-data:
networks:
dev:
external: true
Run Code Online (Sandbox Code Playgroud)
它在第一次运行时有效,但当我想进行更改时,出现以下错误。我已经尝试过停止、杀死、关闭所有容器,但没有任何效果。
当我运行时,docker-compose up --force-recreate --build -d我得到以下输出:
=> ERROR [stage-0 5/10] RUN useradd -G www-data,root -u 1000 -d /home/devuser devuser 0.4s
------
> [stage-0 5/10] RUN useradd -G www-data,root -u 1000 -d /home/devuser devuser:
#8 0.354 useradd: user 'devuser' already exists
------
executor failed running [/bin/sh -c useradd -G www-data,root -u $uid -d /home/$user $user]: exit code: 9
ERROR: Service 'app' failed to build : Build failed
Run Code Online (Sandbox Code Playgroud)
为什么会出现这种情况?容器不是封装的吗?设置新环境时如何发生冲突?我已停止所有正在运行的容器
编辑:例如,当我更改uid和时,它会再次工作一次。user1001devuser1
您已将正在构建的映像命名为与基础映像相同的名称:
image: php:7.4-fpm
Run Code Online (Sandbox Code Playgroud)
这意味着每次运行构建时,您都会添加更多层并从上次构建中进行变异,而不是从原始基础映像重新创建。
解决方法是将您的图像命名为您独有的名称,而不是使用上游库图像名称。
image: <your_hub_user>/app:latest
Run Code Online (Sandbox Code Playgroud)
然后再次拉取上游库映像,将其恢复到已知的干净状态:
docker pull php:7.4-fpm
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3382 次 |
| 最近记录: |