gpt4 book ai didi

macos - Docker 容器中卷的权限错误

转载 作者:行者123 更新时间:2023-12-01 16:56:50 25 4
gpt4 key购买 nike

我通过本地 docker-machine 虚拟机在 OSX 10.11 中运行 Docker 1.8.1。

我有以下 docker-compose.yml:

web:
build: docker/web
ports:
- 80:80
- 8080:8080
volumes:
- $PWD/cms:/srv/cms

我的 Dockerfile 如下所示:

FROM alpine

# install nginx and php
RUN apk add --update \
nginx \
php \
php-fpm \
php-pdo \
php-json \
php-openssl \
php-mysql \
php-pdo_mysql \
php-mcrypt \
php-ctype \
php-zlib \
supervisor \
wget \
curl \
&& rm -rf /var/cache/apk/*

RUN mkdir -p /etc/nginx && \
mkdir -p /etc/nginx/sites-enabled && \
mkdir -p /var/run/php-fpm && \
mkdir -p /var/log/supervisor && \
mkdir -p /srv/cms

RUN rm /etc/nginx/nginx.conf
ADD nginx.conf /etc/nginx/nginx.conf
ADD thunder.conf /etc/nginx/sites-enabled/thunder.conf

ADD nginx-supervisor.ini /etc/supervisor.d/nginx-supervisor.ini

WORKDIR "/srv/cms"
VOLUME "/srv/cms"

EXPOSE 80
EXPOSE 8080
EXPOSE 22

CMD ["/usr/bin/supervisord"]

当我使用 docker-compose up 运行所有内容时,一切正常,我的卷已安装在正确的位置。

但是安装的文件夹/srv/cms 中的权限看起来不正确。容器中用户为“1000”,组为“50”。网络服务器无法在此文件夹中创建任何文件,因为它以用户“root”运行。

最佳答案

1) 总体思路:Docker 它不是 Vagrant。将两个不同的服务放入一个容器是错误的!将其分成两个不同的图像并将它们链接在一起。不要做这种糟糕的图像。

检查并关注https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/

  • 避免安装不必要的软件包
  • 每个容器仅运行一个进程
  • 尽量减少层数

如果你这样做:

  • 您将解雇您的主管
  • 您可以减少层数

它应该类似于(示例):

FROM alpine

RUN apk add --update \
wget \
curl
RUN apk add --update \
php \
php-fpm \
php-pdo \
php-json \
php-openssl \
php-mysql \
php-pdo_mysql \
php-mcrypt \
php-ctype \
php-zlib
RUN usermod -u 1000 www-data
RUN rm -rf /var/cache/apk/*

EXPOSE 9000

对于 nginx,使用默认镜像和挂载配置就足够了。docker-compose 文件如下:

nginx:
image: nginx
container_name: site.dev
volumes:
- ./myconf1.conf:/etc/nginx/conf.d/myconf1.conf
- ./myconf2.conf:/etc/nginx/conf.d/myconf2.conf
- $PWD/cms:/srv/cms
ports:
- "80:80"
links:
- phpfpm
phpfpm:
build: ./phpfpm/
container_name: phpfpm.dev
command: php5-fpm -F --allow-to-run-as-root
volumes:
- $PWD/cms:/srv/cms

2)将 RUN usermod -u 1000 www-data 添加到 php 容器的 Dockerfile 中,它将修复权限问题。

关于macos - Docker 容器中卷的权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36120679/

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