gpt4 book ai didi

php - Docker 图像推送但我的音量不持久

转载 作者:行者123 更新时间:2023-12-02 20:59:10 25 4
gpt4 key购买 nike

此消息用于解决我在 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

提前致谢

最佳答案

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

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

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

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

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

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

关于php - Docker 图像推送但我的音量不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61306515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com