我已经使用composer创建了一个新的SilverStripe项目,我想让我的容器通过docker-compose up
启动和运行。
FROM brettt89/silverstripe-web:7.4-apache
ENV DOCUMENT_ROOT /var/www/html/public
COPY . $DOCUMENT_ROOT
WORKDIR $DOCUMENT_ROOT
RUN chown www-data:www-data $DOCUMENT_ROOT
USER www-data
以及一个简单的compose yaml文件,该文件指定了它工作所需的几乎所有服务。下面是它的样子:
version: "3.8"
services:
silverstripe:
build:
context: .
volumes:
- .:/var/www/html
depends_on:
- database
environment:
- DOCUMENT_ROOT=/var/www/html/public
- SS_TRUSTED_PROXY_IPS=*
- SS_ENVIRONMENT_TYPE=dev
- SS_DATABASE_SERVER=database
- SS_DATABASE_NAME=SS_mysite
- SS_DATABASE_USERNAME=root
- SS_DATABASE_PASSWORD=
- SS_DEFAULT_ADMIN_USERNAME=admin
- SS_DEFAULT_ADMIN_PASSWORD=password
ports:
- 8088:80
database:
image: mysql:5.7
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
我可以让我的容器启动并运行。但是当我转到127.0.0.1:8080:/dev/build
时,它正在引发mkdir():permission denied警告。
我可以看到我的文件在容器有1000:1000的所有权,我假设仍然是根?
所以想知道我怎么能解决这个问题。我已经看到了一些例子,例如可以通过docker build
创建容器,但我只想能够通过docker-compose up
运行东西。
我使用的是Ubuntu-20.04,项目已经由$USER创建。
修复此问题的最快技巧,用于设置本地环境使用usermod命令将用户UID从1000
更改为www-data
:
RUN usermod -u 1000 www-data
那么,当然,你可以跳过最后两行。
你可以在这里找到更多信息:https://blog.gougousis.net/file-permissions-the-painful-side-of-docker/