es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

/bin/sh: 1: clickhouse: Operación no permitida.

Estoy creando una imagen Docker de Clickhouse para la versión 21.8.11.4. El Dockerfile se construye correctamente, pero cuando intento ejecutarlo con el comando “docker run “, se muestra el mensaje de error “/bin/sh: 1: exec: /usr/bin/clickhouse-server: Operación no permitida”.

Dockerfile:

FROM ubuntu:20.04

ENV CH_VERSION 21.8.11.4

COPY default-password.xml /etc/clickhouse-server/users.d/default-password.xml
RUN apt-get update
RUN apt-get install --yes --no-install-recommends apt-transport-https apt-utils dirmngr gnupg 
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4
RUN echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | tee /etc/apt/sources.list.d/clickhouse.list
RUN apt-get update
RUN apt-get install --allow-unauthenticated -y clickhouse-client=${CH_VERSION} clickhouse-server=${CH_VERSION} clickhouse-common-static=${CH_VERSION} libgcc-7-dev tzdata libreadline-dev curl 
RUN rm -rf /var/lib/apt/lists/* /var/cache/debconf /tmp/* 
RUN apt-get clean

VOLUME /var/lib/clickhouse

EXPOSE 9000 8123 9009

ENTRYPOINT exec /usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml

default-password.xml:

<yandex>
    <users>
        <default>
            <password remove='1'></password>
            <password_sha256_hex>ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad</password_sha256_hex>
        </default>
    </users>
</yandex>

Comandos:

$docker build -t clickhouse-server:21.8.11.4 .
$docker run clickhouse-server:21.8.11.4
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Este mensaje de error suele indicar un problema de permisos en el contenedor de Docker. En este caso, parece que el ejecutable clickhouse-server no tiene suficientes permisos para ejecutarse.

    Para solucionar este problema, puedes modificar el Dockerfile para incluir un usuario con los permisos adecuados para ejecutar el proceso clickhouse-server.

    Una solución posible es agregar las siguientes líneas al Dockerfile, justo antes de la línea ENTRYPOINT:

    RUN groupadd -r clickhouse && useradd -r -g clickhouse clickhouse
    RUN chown -R clickhouse:clickhouse /var/lib/clickhouse
    USER clickhouse
    

    Estos comandos crearán un nuevo usuario y grupo del sistema llamado clickhouse, cambiarán la propiedad del directorio /var/lib/clickhouse a este usuario y grupo, y luego cambiarán el contenedor para que se ejecute como este usuario.

    Tu Dockerfile modificado debería verse así:

    FROM ubuntu:20.04
    
    ENV CH_VERSION 21.8.11.4
    
    COPY default-password.xml /etc/clickhouse-server/users.d/default-password.xml
    RUN apt-get update
    RUN apt-get install --yes --no-install-recommends apt-transport-https apt-utils dirmngr gnupg
    RUN apt-key adv --keyserver keyserver.ubuntu.com --recv E0C56BD4
    RUN echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | tee /etc/apt/sources.list.d/clickhouse.list
    RUN apt-get update
    RUN apt-get install --allow-unauthenticated -y clickhouse-client=${CH_VERSION} clickhouse-server=${CH_VERSION} clickhouse-common-static=${CH_VERSION} libgcc-7-dev tzdata libreadline-dev curl
    RUN rm -rf /var/lib/apt/lists/* /var/cache/debconf /tmp/*
    RUN apt-get clean
    
    VOLUME /var/lib/clickhouse
    
    # Agregar el usuario con los permisos adecuados
    RUN groupadd -r clickhouse && useradd -r -g clickhouse clickhouse
    RUN chown -R clickhouse:clickhouse /var/lib/clickhouse
    USER clickhouse
    
    EXPOSE 9000 8123 9009
    
    ENTRYPOINT exec /usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml
    

    Después de hacer estos cambios, reconstruye la imagen de Docker y vuelve a intentar ejecutarla con el comando docker run.

    $ docker build -t clickhouse-server:21.8.11.4 .
    $ docker run clickhouse-server:21.8.11.4
    

    Esto debería ejecutar el proceso clickhouse-server como el nuevo usuario clickhouse, que debería tener suficientes permisos para ejecutar el proceso sin problemas.

Comments are closed.