本仓库包含一个基础镜像,基于Alpine + PHP + (Caddy或Nginx),可用于构建包含项目代码的Docker镜像。
警告:由于
Transfer-Encoding可能存在DoS风险,建议使用Nginx镜像而非Caddy。https://github.com/shopware/docker/issues/107
注意:此Docker镜像要求通过Composer安装所有扩展。否则,将出现
类X未找到错误。详见文档
在项目中创建如下Dockerfile:
dockerfile#syntax=docker/dockerfile:1.4 # 固定版本 FROM ghcr.io/shopware/docker-base:8.2-nginx as base-image FROM ghcr.io/friendsofshopware/shopware-cli:latest-php-8.2 as shopware-cli # 构建阶段 FROM shopware-cli as build COPY --link . /src WORKDIR /src RUN --mount=type=secret,id=composer_auth,dst=/src/auth.json \ --mount=type=cache,target=/root/.composer \ --mount=type=cache,target=/root/.npm \ /usr/local/bin/entrypoint.sh shopware-cli project ci /src # 构建最终镜像 FROM base-image COPY --from=build --chown=www-data /src /var/www/html
或更好的方式:运行composer req shopware/docker安装Symfony Recipe。
在build阶段,我们使用shopware-cli构建Shopware文件:
更多关于shopware-cli project ci的信息,请参考https://github.com/FriendsOfShopware/shopware-cli%E3%80%82
在CI流水线中构建包含源代码的自定义Docker镜像,并推送到容器仓库。之后可在docker-compose、Kubernetes等环境中使用该镜像。
yamlname: Build Docker Image on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login into Github Docker Registery run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin - name: Build and push uses: docker/build-push-action@v4 with: context: . file: ./docker/Dockerfile push: true tags: ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}
注意 以下配置不共享var/log或var/cache。建议使用Redis进行缓存,日志应转发到stderr以便在容器日志中查看。
yamlversion: "3.8" services: db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: 'shopware' MYSQL_USER: shopware MYSQL_PASSWORD: shopware MYSQL_DATABASE: shopware volumes: - mysql-data:/var/lib/mysql init-perm: image: alpine volumes: - files:/var/www/html/files - theme:/var/www/html/public/theme - media:/var/www/html/public/media - thumbnail:/var/www/html/public/thumbnail - sitemap:/var/www/html/public/sitemap command: chown 82:82 /var/www/html/files /var/www/html/public/theme /var/www/html/public/media /var/www/html/public/thumbnail /var/www/html/public/sitemap init: image: local build: context: . env_file: .app.env entrypoint: /setup volumes: - files:/var/www/html/files - theme:/var/www/html/public/theme - media:/var/www/html/public/media - thumbnail:/var/www/html/public/thumbnail - sitemap:/var/www/html/public/sitemap depends_on: db: condition: service_started init-perm: condition: service_completed_successfully web: image: local build: context: . volumes: - files:/var/www/html/files - theme:/var/www/html/public/theme - media:/var/www/html/public/media - thumbnail:/var/www/html/public/thumbnail - sitemap:/var/www/html/public/sitemap depends_on: init: condition: service_completed_successfully env_file: .app.env ports: - 8000:8000 worker: image: local restart: unless-stopped build: context: . volumes: - files:/var/www/html/files - theme:/var/www/html/public/theme - media:/var/www/html/public/media - thumbnail:/var/www/html/public/thumbnail - sitemap:/var/www/html/public/sitemap depends_on: init: condition: service_completed_successfully env_file: .app.env entrypoint: [ "php", "bin/console", "messenger:consume", "async", "low_priority", "--time-limit=300", "--memory-limit=512M" ] deploy: replicas: 3 scheduler: image: local restart: unless-stopped build: context: . volumes: - files:/var/www/html/files - theme:/var/www/html/public/theme - media:/var/www/html/public/media - thumbnail:/var/www/html/public/thumbnail - sitemap:/var/www/html/public/sitemap depends_on: init: condition: service_completed_successfully env_file: .app.env entrypoint: [ "php", "bin/console", "scheduled-task:run" ] volumes: mysql-data: files: theme: media: thumbnail: sitemap:
在设置中,应始终包含一个“init”容器,通过入口点/setup执行扩展更新、主题编译等基础操作。当该容器退出后,即可启动实际的应用/工作容器。详见上述docker-compose示例。
| 变量 | 默认值 | 描述 |
|---|---|---|
| APP_ENV | prod | 环境 |
| APP_SECRET | (空) | 可通过openssl rand -hex 32生成 |
| INSTANCE_ID | (空) | 商店唯一标识符:可通过openssl rand -hex 32生成 |
| JWT_PRIVATE_KEY | (空) | 可通过shopware-cli project generate-jwt --env生成 |
| JWT_PUBLIC_KEY | (空) | 可通过shopware-cli project generate-jwt --env生成 |
| LOCK_DSN | flock | Symfony锁定DSN |
| APP_URL | (空) | Shopware访问地址 |
| DATABASE_HOST | (空) | MySQL主机(用于检查MySQL是否存活) |
| DATABASE_PORT | 3306 | MySQL端口(用于检查MySQL是否存活) |
| BLUE_GREEN_DEPLOYMENT | 0 | 启用需超级权限以创建触发器 |
| DATABASE_URL | (空) | MySQL凭证DSN |
| DATABASE_SSL_CA | (空) | SSL CA文件路径(需对uid 512可读) |
| DATABASE_SSL_CERT | (空) | SSL证书文件路径(需对uid 512可读) |
| DATABASE_SSL_KEY | (空) | SSL密钥文件路径(需对uid 512可读) |
| DATABASE_SSL_DONT_VERIFY_SERVER_CERT | (空) | 禁用服务器证书验证(1表示禁用) |
| MAILER_DSN | null://localhost | 邮件发送DSN(管理后台配置可覆盖此值) |
| OPENSEARCH_URL | (空) | OpenSearch主机 |
| SHOPWARE_ES_ENABLED | 0 | 是否启用OpenSearch支持 |
| SHOPWARE_ES_INDEXING_ENABLED | 0 | 是否启用OpenSearch索引 |
| SHOPWARE_ES_INDEX_PREFIX | (空) | OpenSearch索引前缀 |
| COMPOSER_HOME | /tmp/composer | 插件管理器缓存目录 |
| SHOPWARE_HTTP_CACHE_ENABLED | 1 | 是否启用HTTP缓存 |
| SHOPWARE_HTTP_DEFAULT_TTL | 7200 | HTTP缓存默认TTL |
| MESSENGER_TRANSPORT_DSN | (空) | 默认异步队列DSN(示例:amqp://guest:guest@localhost:5672/%2f/default) |
| MESSENGER_TRANSPORT_LOW_PRIORITY_DSN | (空) | 低优先级队列DSN(示例:amqp://guest:guest@localhost:5672/%2f/low_prio) |
| MESSENGER_TRANSPORT_FAILURE_DSN | (空) | 失败消息队列DSN(示例:amqp://guest:guest@localhost:5672/%2f/failure) |
| COMPOSER_PLUGIN_LOADER | 1 | 启用时禁用动态插件加载,所有插件需通过Composer安装(详见文档) |
| INSTALL_LOCALE | en-GB | 商店默认语言 |
| INSTALL_CURRENCY | EUR | 商店默认货币 |
| INSTALL_ADMIN_USERNAME | admin | 默认管理员用户名 |
| INSTALL_ADMIN_PASSWORD | shopware | 默认管理员密码 |
| PHP_SESSION_COOKIE_LIFETIME | 0 | 参考PHP FPM文档([***] |
| PHP_SESSION_GC_MAXLIFETIME | 1440 | 参考PHP FPM文档([***] |
| PHP_SESSION_HANDLER | files | 设置为redis使用Redis存储会话 |
| PHP_SESSION_SAVE_PATH | (空) | Redis会话存储路径,如tcp://redis:6379 |
| PHP_MAX_UPLOAD_SIZE | 128m | 参考PHP文档 |
| PHP_MAX_EXECUTION_TIME | 300 | 参考PHP文档 |
| PHP_MEMORY_LIMIT | 512m | 参考PHP文档 |
| FPM_PM | dynamic | 参考PHP FPM文档([***] |
| FPM_PM_MAX_CHILDREN | 5 | 参考PHP FPM文档([***] |
| FPM_PM_START_SERVERS | 2 | 参考PHP FPM文档([***] |
| FPM_PM_MIN_SPARE_SERVERS | 1 | 参考PHP FPM文档([***] |
| FPM_PM_MAX_SPARE_SERVERS | 3 | 参考PHP FPM文档([***] |
在基础设置中,当所有文件本地存储时,需5个卷:
| 用途 | 路径 |
|---|---|
| 发票/私有文件 | /var/www/html/files |
| 主题文件 | /var/www/html/public/theme |
| 图片 | /var/www/html/public/media |
| 图片缩略图 | /var/www/html/public/thumbnail |
| 生成的站点地图 | /var/www/html/public/sitemap |
建议尽可能使用外部存储服务存储文件。使用外部存储服务时无需挂载卷。详见Shopware官方文档。
可将PHP_SESSION_HANDLER设置为redis,PHP_SESSION_SAVE_PATH设置为Redis路径,如tcp://redis:6379
将asset-manifest.json的文件系统覆盖为临时文件系统:
yaml# config/packages/prod/asset-overwrite.yaml services: Shopware\Core\Framework\Plugin\Util\AssetService: arguments: - '@shopware.filesystem.asset' - '@shopware.filesystem.temp' - '@kernel' - '@Shopware\Core\Framework\Plugin\KernelPluginLoader\KernelPluginLoader' - '@Shopware\Core\Framework\Adapter\Cache\CacheInvalidator' - '@Shopware\Core\Framework\App\Lifecycle\AppLoader' - '@parameter_bag'
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。



探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务