docker — Dockerfile — ОШИБКА: для php Невозможно запустить службу php: время выполнения OCI не удалось создать: container_linux.go: 348: запуск процесса контейнера вызвал & quot; exec

Я довольно новичок в использовании Docker и пытаюсь создать локальную среду разработки для запуска своих собственных проектов php или laravel.

Это моя структура папок

root-dir
- src // this is where my php / laravel code lives
-- info.php // file having phpinfo(); just to ensure that everything has set properly
- docker // this is where all containers and config settings live
-- php etc..
- docker-compose.yml

Это мой докер / php / Dockerfile

FROM ubuntu:18.04

ENV TERM=linux

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update
RUN apt-get install -y curl zip unzip --no-install-recommends apt-utils ca-certificates
RUN apt-get install -y --no-install-recommends php7.2-fpm \
php7.2-cli \
php7.2-mysql \
php7.2-xml \
php7.2-curl \
php7.2-bcmath \
php7.2-bz2 \
php7.2-curl \
php7.2-zip \
php7.2-gd \
php7.2-gettext \
php7.2-zip \
php7.2-soap \
php7.2-odbc \
php7.2-json \
php7.2-geoip \
php7.2-igbinary \
php7.2-imagick \
php7.2-mbstring \
php7.2-msgpack \
php7.2-ssh2 \
php7.2-memcached \
php7.2-xdebug \
php7.2-intl \
php7.2-opcache \
php7.2-readline

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* ~/.composer


COPY php.ini /etc/php/$PHPVER/cli/php.ini
COPY php.ini /etc/php/$PHPVER/fpm/php.ini
COPY 20-xdebug.ini /etc/php/$PHPVER/cli/conf.d/20-xdebug.ini
COPY 20-xdebug.ini /etc/php/$PHPVER/fpm/conf.d/20-xdebug.ini
COPY php-fpm-startup /usr/bin/php
CMD /usr/bin/php

EXPOSE 9000

ENTRYPOINT ["/usr/bin/php"]
CMD ["--version"]

Когда я бегу docker-compose up -d Я получаю эту ошибку

ERROR: for php  Cannot start service php: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/usr/bin/php\": permission denied": unknown

Это мой файл nginx / default.conf

server {

listen 80 default_server;
root /var/www/html;
index index.html index.php;

charset utf-8;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }

access_log off;
error_log /var/log/nginx/error.log error;

sendfile off;

client_max_body_size 100m;

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}

location ~ /\.ht {
deny all;
}
}

2

Решение

добавьте пользователя в ваш dockerfile, который выполнит для вас двоичный файл php примерно так:

....
RUN ["chmod", "+x", "/usr/bin/php"]
RUN ["chmod", "+x", "-R", "/var/log"]
EXPOSE 9000
RUN useradd -ms /bin/bash admin
USER admin
ENTRYPOINT ["/usr/bin/php"]
CMD ["--version"]
0

Другие решения

RE: чат convo

Однако вы обеспокоены тем, почему контейнер перестал работать.

Если ваша команда завершает выполнение, контейнер будет прерван
Если ваша команда завершится неудачно и tty умрет, контейнер прекратит работу.

Другими словами, если ваша команда никогда не выполняется, не запускается и не завершается, как в вашем примере

php -verson

это код, который вы пытаетесь запустить
когда это завершится, контейнер прекратит
Если вы не ловите stdout вы никогда не увидите это выполнить
и контейнер прекратит работу, как будто ничего не произошло.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector