我使用官方的 php:alpine https://github.com/docker-library/php/blob/master/7.2/alpine3.7/fpm/Dockerfile作为我的基础镜像。我的项目基本上是基于作曲家的项目。所以我在它上面安装了 Composer,如下所示。
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin -- --filename=composer
Run Code Online (Sandbox Code Playgroud)
当我使用composer install它安装任何软件包时,它以 root 身份运行,因为主 php 进程以 root 身份运行。那么如何以 root 身份运行主 php 进程,以另一个非 root 用户身份运行 composerdeploy呢?
Update-1
我的 dockerfile 如下所示。所以你可以看到我没有安装内部dockerfile作曲家的包,而我在安装这些包容器一样docker exec -it php composer install。
FROM php:7.2-fpm-alpine
..........................
..........................
..........................
RUN set ex \
# Install Composer( Requires git )
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin -- --filename=composer \
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]
Run Code Online (Sandbox Code Playgroud)
我试图像https://unix.stackexchange.com/questions/476155/how-to-pass-multiple-parameters-to-su-user-c-command一样实现它,但徒劳无功。
我想通过 Docker 引导我的 Azure VM,并使用 cloud-init 进行 Docker-compose。到目前为止,我尝试了如下所示的方法。
#cloud-config
package_update: true
package_upgrade: true
groups:
- docker: [default]
runcmd:
- [ sh, -c, "curl -sSL https://get.docker.com/ | sh" ]
- [ sh, -c, "sudo curl -L "https://github.com/docker/compose/releases/download/$(git ls-remote https://github.com/docker/compose | grep refs/tags | grep -oP "[0-9]+\.[0-9][0-9]+\.[0-9]+$" | tail -n 1)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose" ]
- [ sh, -c, "sudo chmod +x /usr/local/bin/docker-compose" ]
Run Code Online (Sandbox Code Playgroud)
但它没有安装 docker/ docker-compose 并出现以下错误
cloud-init[958]: 2019-02-28 00:51:02,447 - util.py[WARNING]: Failed loading yaml blob. Invalid format at line …Run Code Online (Sandbox Code Playgroud) 我正在使用 MAMP + PhpStorm + Wordpress。Ideolog 说我的日志格式无法识别。请帮我配置一下。
我的日志格式:
[06-Feb-2020 15:42:09 UTC] PHP Warning: mysqli_real_connect(): (HY000/2002): No such file or directory in /Volumes/Workspace/Mamp/wordpress/wp-includes/wp-db.php on line 1633
[06-Feb-2020 15:42:09 UTC] PHP Stack trace:
[06-Feb-2020 15:42:09 UTC] PHP 1. {main}() /Volumes/Workspace/Mamp/wordpress/wp-admin/admin-ajax.php:0
[06-Feb-2020 15:42:09 UTC] PHP 2. require_once() /Volumes/Workspace/Mamp/wordpress/wp-admin/admin-ajax.php:22
[06-Feb-2020 15:42:09 UTC] PHP 3. require_once() /Volumes/Workspace/Mamp/wordpress/wp-load.php:37
[06-Feb-2020 15:42:09 UTC] PHP 4. require_once() /Volumes/Workspace/Mamp/wordpress/wp-config.php:92
[06-Feb-2020 15:42:09 UTC] PHP 5. require_wp_db() /Volumes/Workspace/Mamp/wordpress/wp-settings.php:116
[06-Feb-2020 15:42:09 UTC] PHP 6. wpdb->__construct() /Volumes/Workspace/Mamp/wordpress/wp-includes/load.php:425
[06-Feb-2020 15:42:09 UTC] PHP 7. wpdb->db_connect() /Volumes/Workspace/Mamp/wordpress/wp-includes/wp-db.php:632 …Run Code Online (Sandbox Code Playgroud) 我按照他们的文档安装了 Portainer,如下所示:
version: '2'
services:
portainer:
image: portainer/portainer
command: -H unix:///var/run/docker.sock
restart: always
ports:
- 9000:9000
- 8000:8000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
volumes:
portainer_data:
Run Code Online (Sandbox Code Playgroud)
然而,我后来发现他们的文件浏览器功能只有Portainer代理支持。
我还发现了以下示例:
version: '3.2'
services:
agent:
image: portainer/agent
environment:
# REQUIRED: Should be equal to the service name prefixed by "tasks." when
# deployed inside an overlay network
AGENT_CLUSTER_ADDR: tasks.agent
# AGENT_PORT: 9001
# LOG_LEVEL: debug
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
networks:
- agent_network
deploy:
mode: global
placement:
constraints: [node.platform.os == …Run Code Online (Sandbox Code Playgroud) 我想将所有开发工具与主 php-fpm 和 nginx 容器分开。所以我基本上有3个名为php-fpm 的容器在端口 9000 上运行,nginx在端口 80 上运行,dev-tools。我已经在我的开发工具容器上安装了 xdebug、composer 等,但我很困惑如何配置 xdebug 以便它能够与 php-fpm 容器一起工作并可以调试我的网站?第二个问题 xdebug 需要 php-cli 或 php-fpm 才能运行吗?
#开发工具
FROM php:7.2-cli-alpine
# Install the PHP extensions we need
RUN set -ex \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin -- --filename=composer.phar \
&& apk add --no-cache git \
&& pecl install xdebug \
&& docker-php-ext-enable xdebug
Run Code Online (Sandbox Code Playgroud) 如何从网址中删除除基本网址和第一部分以外的所有部分。零件数量不确定。基本网址是可变的。我尝试了一些正则表达式,但没有成功。
$url = http://www.example.com/part1/part2/part3/part4;
base_url = parse_url($url, PHP_URL_HOST); // Outputs www.example.com
$desired_output = http://www.example.com/part1;
Run Code Online (Sandbox Code Playgroud) docker ×3
php ×3
regex ×2
azure ×1
cloud-init ×1
composer-php ×1
devops ×1
nginx ×1
phpstorm ×1
portainer ×1
preg-replace ×1
regex-greedy ×1
regex-group ×1
shell ×1
xdebug ×1