Docker镜像正在推送,但我的卷无法保持



此消息用于解决我在php应用程序中使用docker时遇到的问题。

事实上,我在本地执行我的dockers映像(nginx、phpmyadmin和php与我的应用程序(,一切都很好。然而,我使用php在容器应用程序中安装的卷,这使我能够修改热文件(无需在每次编辑时构建(。

但是,当我将此映像推送到存储库并将其拉到另一个桌面上时,包含我的应用程序的卷不在那里。

你曾经面对过这种担忧吗?

请找到我的docker-compose.yml和Dockerfile:

docker compose.yml

version: "3.7"
services:
app:
build:
args:
user: web
uid: 1000
context: ./
dockerfile: Dockerfile
image: myblog
container_name: myblog-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- myblog
db:
image: mysql:5.7
container_name: myblog-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_DATABASE}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USERNAME}
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./.docker/mysql/database.sql:/docker-entrypoint-initdb.d/init.sql
- ./.docker/mysql/data:/var/lib/mysql
networks:
- myblog
phpmyadmin:
depends_on:
- db
image: phpmyadmin/phpmyadmin
restart: always
ports:
- 8002:80
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
networks:
- myblog
nginx:
image: nginx:alpine
container_name: myblog-nginx
restart: unless-stopped
ports:
- 8000:80
volumes:
- ./:/var/www
- ./.docker/nginx/conf.d:/etc/nginx/conf.d
networks:
- myblog
networks:
myblog:
driver: bridge

Dockerfile

FROM php:7.3-fpm
# Arguments defined in docker-compose.yml
ARG user
ARG uid
# Install system dependencies
RUN apt-get update && apt-get install -y 
git 
curl 
libpng-dev 
libonig-dev 
libxml2-dev 
libzip-dev 
zip 
unzip
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
RUN docker-php-ext-install zip
RUN docker-php-ext-enable zip
# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && 
chown -R $user:$user /home/$user
# Set working directory
WORKDIR /var/www
USER $user

提前感谢

这是预期行为,因为卷内的数据不是图像的一部分。卷用于持久化容器中生成的数据,或通过绑定装载(如配置、凭据或证书(将动态数据传递到容器中。

https://docs.docker.com/storage/volumes/

使用卷通过- .:/path/to/dir装载本地目录的docker-compose.yml及其服务只适用于本地开发,因为您可以立即看到应用程序的更改,而无需重建映像。

如果你想在另一台机器上的图像中看到你的代码,你需要在Dockerfile中使用COPY,重建图像并在每次更改代码时推送!

您还需要通过添加卷来更改docker-compose.yml

https://docs.docker.com/compose/compose-file/#volumes

非常感谢您的明确回复。

现在我明白了我的配置有什么问题,我需要做什么。对于那些搜索解决方案以在同一Dockerfile中管理开发环境和生产的人,您可以使用Argument:(

您是否尝试过使用命名卷而不是基于路径的卷?

这将让Docker为您更多地管理卷,并可能为您提供所需的行为。

https://nickjanetakis.com/blog/docker-tip-28-named-volumes-vs-path-based-volumes

Docker卷没有持久化数据

最新更新