gpt4 book ai didi

linux - Dockerfile 中的 sed 命令不会被执行或被覆盖

转载 作者:行者123 更新时间:2023-12-04 15:28:02 31 4
gpt4 key购买 nike

我希望它以与我在主机系统上使用的用户相同的用户身份在 docker 容器中运行 apache。因此,我拥有主机上的文件来编辑它们,而 apache (PHP) 可以创建文件夹等。

编辑:我通过稍微改变它来使用 sed 命令:

RUN sed -rie 's|export APACHE_RUN_USER=.*|export APACHE_RUN_USER=wipster|g' /etc/apache2/envvars
RUN sed -rie 's|export APACHE_RUN_GROUP=.*|export APACHE_RUN_GROUP=wipster|g' /etc/apache2/envvars

但是当使用 top 检查时,apache 仍然以 www-data 运行。

我的 Dockerfile :
FROM php:7.2-apache

RUN adduser wipster --disabled-password --disabled-login --gecos ""

ENV APACHE_RUN_USER wipster
ENV APACHE_RUN_GROUP wipster

RUN sed -i "s#APACHE_RUN_USER:=.*#APACHE_RUN_USER:=wipster}#" /etc/apache2/envvars \
&& sed -i "s#APACHE_RUN_GROUP:=.*#APACHE_RUN_GROUP:=wipster}#" /etc/apache2/envvars

RUN apt-get -qqy update \
&& apt-get install -y libjpeg-dev libpng-dev re2c libmcrypt-dev zlib1g-dev libssl-dev libc-client2007e-dev libkrb5-dev libcurl4-gnutls-dev libxml2-dev libxslt-dev libldap2-dev libssl-dev vim strace unzip g++

RUN touch /var/www/html/php-error.log
RUN chown wipster:wipster /var/www/html/php-error.log

RUN docker-php-ext-install bcmath mbstring mysqli pdo_mysql zip curl pcntl \
&& docker-php-ext-configure gd --with-jpeg-dir=/usr/lib \
&& docker-php-ext-install gd \
&& docker-php-ext-configure imap --with-imap-ssl --with-kerberos \
&& docker-php-ext-install imap \
&& docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \
&& docker-php-ext-install ldap

# Install xhprof from tideways.
RUN curl -L https://github.com/tideways/php-xhprof-extension/archive/v5.0-beta2.tar.gz | tar xz && \
cd php-xhprof-extension-5.0-beta2/ && \
phpize && \
./configure && \
make && \
make install

RUN yes | pecl install xdebug-2.7.2 \
&& pecl install redis \
&& docker-php-ext-enable redis xdebug opcache tideways_xhprof

# /usr/local/etc/php
ADD config/crm.php.ini /usr/local/etc/php/conf.d/
ADD config/xdebug.ini /usr/local/etc/php/conf.d/
ADD config/opcache.ini /usr/local/etc/php/conf.d/
ADD config/opcache-blacklist /usr/local/etc/php/
ADD config/xhprof.ini /usr/local/etc/php/conf.d/

RUN a2enmod headers expires deflate rewrite

# xdebug cli debugging
RUN export XDEBUG_CONFIG="remote_enable=1 remote_mode=req remote_port=9000 remote_host=192.168.1.144 remote_connect_back=0"
RUN export PHP_IDE_CONFIG="serverName=wipster-dckr"

EXPOSE 80

VOLUME ["/var/www"]

问题是当我通过 ssh 连接到容器并检查/etc/apache2/envvars 它仍然有 www-data 作为运行用户。我在带有 php:7.1-apache 的 Alpine Linux 上使用了相同的 Dockerfile,它工作得很好。当我手动执行 sed 命令时,它也可以工作。现在我在一个基本的 os Juno 上,图像和 略有不同。 docker 版本是 18.09.7 .

我的 docker-compose.yml :
version: "3"

networks:
webnet:
services:
web:
image: wipster/relaunch:1
depends_on:
- db
deploy:
replicas: 1
resources:
limits:
cpus: '3.0'
memory: 2000M
reservations:
cpus: '1.0'
memory: 1000M
volumes:
- ../relaunch:/var/www/html:delegated
ports:
- 8000:80
networks:
- webnet
db:
image: mysql:5.7
deploy:
replicas: 1
resources:
limits:
cpus: '2.0'
memory: 1000M
reservations:
cpus: '1.0'
memory: 500M
volumes:
- db_data_wipster:/var/lib/mysql:delegated
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wipster
MYSQL_USER: root
MYSQL_PASSWORD: root
ports:
- 3306:3306
networks:
- webnet
command: mysqld --sql_mode="NO_ENGINE_SUBSTITUTION" --innodb-buffer-pool-size=536870912 --innodb-flush-method=O_DIRECT --innodb-flush-log-at-trx-commit=0
volumes:
db_data_wipster:

我错过了什么吗?我需要稍后运行 sed 命令吗?那也行不通。

最佳答案

您可以通过执行 grep 来验证文件是否被正确修改:

FROM php:7.2-apache

RUN adduser wipster --disabled-password --disabled-login --gecos ""

ENV APACHE_RUN_USER wipster
ENV APACHE_RUN_GROUP wipster

RUN cat /etc/apache2/envvars | grep -B 2 -A 2 APACHE_RUN_USER

RUN sed -i "s#APACHE_RUN_USER:=.*#APACHE_RUN_USER:=wipster}#" /etc/apache2/envvars \
&& sed -i "s#APACHE_RUN_GROUP:=.*#APACHE_RUN_GROUP:=wipster}#" /etc/apache2/envvars

RUN cat /etc/apache2/envvars | grep -B 2 -A 2 APACHE_RUN_USER

它确实似乎做出了你想要的改变:
Step 5/7 : RUN cat /etc/apache2/envvars | grep -B 2 -A 2 APACHE_RUN_USER
---> Running in 76aad84738a1
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
: ${APACHE_RUN_USER:=www-data}
export APACHE_RUN_USER
: ${APACHE_RUN_GROUP:=www-data}
export APACHE_RUN_GROUP
Removing intermediate container 76aad84738a1
---> 1be6e6068d73
Step 6/7 : RUN sed -i "s#APACHE_RUN_USER:=.*#APACHE_RUN_USER:=wipster}#" /etc/apache2/envvars && sed -i "s#APACHE_RUN_GROUP:=.*#APACHE_RUN_GROUP:=wipster}#" /etc/apache2/envvars
---> Running in 75a741dadb34
Removing intermediate container 75a741dadb34
---> 6b2d9b0dfdac
Step 7/7 : RUN cat /etc/apache2/envvars | grep -B 2 -A 2 APACHE_RUN_USER
---> Running in 2555c019ab43
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
: ${APACHE_RUN_USER:=wipster}
export APACHE_RUN_USER
: ${APACHE_RUN_GROUP:=wipster}

关于linux - Dockerfile 中的 sed 命令不会被执行或被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58066970/

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