4
votes

I'm trying to build docker-compose, but I'm getting this error:

ERROR: for indicaaquicombrold_mysqld_1 Cannot start service mysqld: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/docker-entrypoint.sh\": permission denied"

ERROR: for mysqld Cannot start service mysqld: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/docker-entrypoint.sh\": permission denied"

ERROR: Encountered errors while bringing up the project.

docker-compose.yml

version: '3'

services:
  php:
    build:
      context: ./docker/php
    image: indicaaqui.com.br:tag
    volumes:
      - ./src:/var/www/html/
      - ./config/apache-config.conf:/etc/apache2/sites-enabled/000-default.conf
    ports:
      - "80:80"
      - "443:443"

  mysqld: 
    build:
      context: ./docker/mysql
    environment:
      - MYSQL_DATABASE=db_indicaaqui
      - MYSQL_USER=indicaqui
      - MYSQL_PASSWORD=secret
      - MYSQL_ROOT_PASSWORD=docker      
    volumes:
      - ./config/docker-entrypoint.sh:/docker-entrypoint.sh
      - ./database/db_indicaaqui.sql:/docker-entrypoint-initdb.d/db_indicaaqui.sql

Dockerfile (php)

FROM php:5.6-apache

MAINTAINER Limup <[email protected]>

CMD [ "php" ]

RUN docker-php-ext-install pdo_mysql

# Enable apache mods.
# RUN a2enmod php5.6
RUN a2enmod rewrite


# Expose apache. 
EXPOSE 80
EXPOSE 443

# Use the default production configuration
# RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

# Override with custom opcache settings
# COPY ./../../config/php.ini $PHP_INI_DIR/conf.d/

# Manually set up the apache environment variables
 ENV APACHE_RUN_USER www-data
 ENV APACHE_RUN_GROUP www-data
 ENV APACHE_LOG_DIR /var/log/apache2
 ENV APACHE_LOCK_DIR /var/lock/apache2
 ENV APACHE_PID_FILE /var/run/apache2.pid

# Update the PHP.ini file, enable <? ?> tags and quieten logging.
RUN sed -i "s/short_open_tag = Off/short_open_tag = On/" "$PHP_INI_DIR/php.ini"
RUN sed -i "s/error_reporting = .*$/error_reporting = E_ERROR | E_WARNING | E_PARSE/" "$PHP_INI_DIR/php.ini"

RUN a2dissite 000-default.conf 
RUN chmod -R 777 /etc/apache2/sites-enabled/

WORKDIR /var/www/html/

# By default start up apache in the foreground, override with /bin/bash for interative.
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

Dockerfile (Mysql)

FROM mariadb:latest

RUN chmod -R 777 /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]

EXPOSE 3306
CMD ["mysqld"]

Please, help me solve this problem!
Any ideas?

4
could you try the property nocopy to volumes? example: code datavolume:/var/lib/mysql:nocopy codemartinkenneth

4 Answers

10
votes

That is most likely a Linux file permission issue on config/docker-entrypoint.sh. If your host is Linux/Mac, you can run:

chmod 755 config/docker-entrypoint.sh

For more on linux permissions, here's a helpful article: https://www.linux.com/learn/understanding-linux-file-permissions

1
votes

First, you need to copy entrypoint.sh file into other directory instead of same your source code (Eg. /home/entrypoint.sh), then grant permission to execute entrypoint script:

RUN ["chmod", "+x", "/home/entrypoint.sh"]
0
votes

Solution

ENV USER root
ENV WORK_DIR_PATH /home
RUN mkdir -p $WORK_DIR_PATH && chown -R $USER:$USER $WORK_DIR_PATH
WORKDIR $WORK_DIR_PATH

Info

  1. The USER instruction sets the user name (or UID) and optionally the user group (or GID) to use when running the image and for any RUN, CMD and ENTRYPOINT instructions that follow it in the Dockerfile.

  2. The WORKDIR instruction sets the working directory for any RUN, CMD, ENTRYPOINT, COPY and ADD instructions that follow it in the Dockerfile. If the WORKDIR doesn’t exist, it will be created even if it’s not used in any subsequent Dockerfile instruction.

Links

chown command

docker builder reference

0
votes

A pretty common solution if nothing works is to re-install Docker.. That's what ended up working for me after trying for like 5 hours everything under the sun in terms of permissions etc.