如何解决使用 docker-compose up 构建 PHP 存在 sudo 问题
当我在 Drupal 站点上运行 docker-compose up
时,我得到以下输出:
=> [internal] load build deFinition from Dockerfile 0.0s
=> => transferring dockerfile: 37B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load Metadata for docker.io/wodby/drupal-PHP:7.3 1.3s
=> CACHED [1/5] FROM docker.io/wodby/drupal-PHP:7.3@sha256:05bc175d426b59eea40fd855125b8c86836081e76493f683d8ad40da8f2008e3 0.0s
=> ERROR [2/5] RUN sudo apk add --no-cache autoconf bash build-base openssl libssh2-dev 0.3s
------
> [2/5] RUN sudo apk add --no-cache autoconf bash build-base openssl libssh2-dev:
#4 0.240
#4 0.240 We trust you have received the usual lecture from the local System
#4 0.240 Administrator. It usually boils down to these three things:
#4 0.240
#4 0.240 #1) Respect the privacy of others.
#4 0.240 #2) Think before you type.
#4 0.240 #3) With great power comes great responsibility.
#4 0.240
#4 0.240 sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
#4 0.240 sudo: a password is required
------
executor Failed running [/bin/sh -c sudo apk add --no-cache autoconf bash build-base openssl libssh2-dev]: exit code: 1
ERROR: Service 'PHP' Failed to build
这是 docker-compose.yml:
version: "2"
services:
mariadb:
image: wodby/mariadb:10.1-2.3.3
environment:
MysqL_ROOT_PASSWORD: password
MysqL_DATABASE: drupal
MysqL_USER: drupal
MysqL_PASSWORD: drupal
ports:
- "3307:3306"
volumes:
# - ./mariadb-init:/docker-entrypoint-initdb.d # Place init .sql file(s) here.
- ./.persist/MysqL:/var/lib/MysqL:cached # I want to manage volumes manually.
labels:
- "traefik.backend=mariadb"
- "traefik.port=3306"
- "traefik.frontend.rule=Host:localhost"
PHP:
# 2. Images without Drupal – wodby/drupal-PHP:[PHP_VERSION]-[STABILITY_TAG].
# image: wodby/drupal-PHP:7.1-2.4.3
# image: wodby/drupal-PHP:7.0-2.1.0
# image: wodby/drupal-PHP:5.6-2.1.0
# image: wodby/drupal-PHP:5.3-2.1.0
build: ./build/PHP
environment:
DOCKER_LOCAL: 1
PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
DB_HOST: mariadb
DB_USER: drupal
DB_PASSWORD: drupal
DB_NAME: drupal
DB_DRIVER: MysqL
PHP_XDEBUG: 1
PHP_XDEBUG_DEFAULT_ENABLE: 1
PHP_XDEBUG_REMOTE_CONNECT_BACK: 0 # This is needed to respect remote.host setting bellow
PHP_XDEBUG_REMOTE_HOST: "10.254.254.254" # You will also need to 'sudo ifconfig lo0 alias 10.254.254.254'
PHP_IDE_CONfig: "serverName=localhost" # Needed for xdebug for drush commands.
PHP_XDEBUG_REMOTE_AUTOSTART: 0
volumes:
- ./:/var/www/html
- ./.persist/public:/var/www/html/docroot/sites/default/files
- ./.persist/private:/private
Nginx:
# wodby/drupal-Nginx:[DRUPAL_VERSION]-[Nginx_VERSION]-[STABILITY_TAG].
image: wodby/drupal-Nginx:8-1.13-2.4.2
# image: wodby/drupal-Nginx:7-1.10-2.1.0
# image: wodby/drupal-Nginx:6-1.10-2.1.0
depends_on:
- PHP
environment:
Nginx_STATIC_CONTENT_OPEN_FILE_CACHE: "off"
Nginx_ERROR_LOG_LEVEL: debug
Nginx_BACKEND_HOST: PHP
Nginx_SERVER_ROOT: /var/www/html/docroot
volumes:
- ./:/var/www/html
- ./.persist/public:/var/www/html/docroot/sites/default/files
labels:
- "traefik.backend=Nginx"
- "traefik.port=80"
- 'traefik.frontend.rule=HostRegexp:localhost,{subdomain:[a-z0-9-\\.]+}.localhost,{subdomain:[a-z0-9]+}.ngrok.io'
# varnish:
# image: wodby/drupal-varnish:4.1-2.1.0
# depends_on:
# - Nginx
# environment:
# VARNISH_SECRET: secret
# VARNISH_BACKEND_HOST: Nginx
# VARNISH_BACKEND_PORT: 80
# labels:
# - 'traefik.backend=varnish'
# - 'traefik.port=6081'
# - 'traefik.frontend.rule=Host:varnish.localhost'
redis:
image: wodby/redis:3.2-2.1.0
# pma:
# image: PHPmyadmin/PHPmyadmin
# environment:
# PMA_HOST: mariadb
# PMA_USER: drupal
# PMA_PASSWORD: drupal
# PHP_UPLOAD_MAX_FILESIZE: 1G
# PHP_MAX_INPUT_VARS: 1G
# labels:
# - 'traefik.backend=pma'
# - 'traefik.port=80'
# - 'traefik.frontend.rule=Host:pma.localhost'
solr:
## wodby/drupal-solr:[DRUPAL_VERSION]-[SOLR_VERSION]-[STABILITY_TAG].
image: wodby/drupal-solr:8-6.4-2.0.0
## image: wodby/drupal-solr:8-6.3-2.0.0
# image: wodby/drupal-solr:8-5.5-2.0.0
## image: wodby/drupal-solr:7-6.4-2.0.0
## image: wodby/drupal-solr:7-6.3-2.0.0
## image: wodby/drupal-solr:7-5.5-2.0.0
environment:
SOLR_HEAP: 1024m
ports:
- "8983:8983"
volumes:
- ./.persist/solr:/opt/solr/server/solr/core1:delegated
labels:
- "traefik.backend=solr"
- "traefik.port=8983"
- "traefik.frontend.rule=Host:solr.local"
mailhog:
image: mailhog/mailhog
labels:
- "traefik.backend=mailhog"
- "traefik.port=8025"
- "traefik.frontend.rule=Host:mailhog.localhost"
# node:
# image: node:7-alpine
# working_dir: /app
# labels:
# - 'traefik.backend=node'
# - 'traefik.port=3000'
# - 'traefik.frontend.rule=Host:front.localhost'
# expose:
# - "3000"
# volumes:
# - ./path/to/your/single-page-app:/app
# command: sh -c 'npm install && npm run start'
# memcached:
# image: wodby/memcached:1.4-2.0.0
traefik:
image: traefik:1.7
command: -c /dev/null --web --docker --logLevel=INFO --defaultEntryPoints='https,http' --entryPoints='Name:https Address::443 TLS:/certs/local.crt,/certs/local.key' --entryPoints='Name:http Address::80'
ports:
- "80:80"
- "443:443"
# - '8080:8080' # Dashboard
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./.persist/certs:/certs
我使用的是 MacOS Big Sur。
SO 要求我提供更多详细信息,因为我的问题主要是代码,但我不确定还要添加什么。我看过一些博客文章和 SO 答案,其中有一行解决方案,但没有关于将它放在哪里的信息,所以我有点不知所措,因为我不太了解这个问题。
解决方法
我对你的 docker compose 有两个建议:
- 切勿将 root 用户用于您的 docker 映像(安全级别),因此如果您需要修复权限,您可以定义一个新用户并授予一些权限会更好。
- 您的 docker-compose 版本是 2,但当前版本是 3,因此不推荐使用第二个版本,您可以查看版本 3 提供的许多功能。
如果您想要一个可与 docker compose 版本 3 一起使用的 Drupal 应用程序,请查看此链接:drupal-docker-compose-3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。