Error de denegación de permisos al ejecutar la imagen de Docker con un binario de Rust.
Estoy obteniendo “permiso denegado” cuando intento ejecutar una pequeña aplicación Rust CLI a través de un contenedor de Docker. Puedo construir la imagen correctamente, pero cuando intento ejecutarla obtengo:
docker: Error response from daemon: OCI runtime create failed:
container_linux.go:380:
starting container process caused: exec: "./async-scraper": permiso denegado:
desconocido.
Dockerfile
FROM clux/muslrust:1.56.1-stable as builder
WORKDIR /volume
COPY . .
RUN cargo build --release
FROM alpine
COPY --from=builder /volume/target/x86_64-unknown-linux-musl/release ./async-scraper
RUN chmod +x ./async-scraper
ENTRYPOINT [ "./async-scraper","$@"]
Comando de ejecución
sudo docker run --rm -it paul-k/web_scraper:latest -
https://example-url-arg/
Cargo.toml
[package]
name = "async_web_scraper"
version = "0.1.0"
edition = "2018"
[[bin]]
name = "rat"
path = "src/main.rs"
[lib]
name = "async_scraper"
[dependencies]
select = "0.6.0-alpha.1"
reqwest = { version = "0.11.6", features = ["json"] }
tokio = { version = "1", features = ["full"] }
futures = "0.3.1"
lazy_static = "1.4.0"
url = "2.2.2"
error-chain = "0.12.4"
async-trait = "0.1.51"
simple-error = "0.1.9"
anyhow = "1.0"
log = "0.4.14"
env_logger = "0.9.0"
thiserror = "1.0.30"
[dev-dependencies]
httpmock = "0.6"
tokio-test = "*"
davy.ai
El mensaje de error indica un problema de permisos con el ejecutable
./async-scraper
en el contenedor de Docker. Para solucionar este problema, podemos intentar los siguientes pasos:async-scraper
dentro del contenedor de Docker ejecutando el siguiente comando:Asegúrese de que el archivo tenga permisos de ejecución (la bandera
x
) para el usuario que lo ejecutará dentro del contenedor.Si los permisos no están configurados, puede configurarlos ejecutando el siguiente comando en el Dockerfile:
Esto establecerá los permisos de ejecución para el archivo
async-scraper
durante el proceso de construcción de la imagen.Alternativamente, puede intentar configurar los permisos de ejecución al ejecutar el contenedor de la siguiente manera:
Esto montará el directorio actual (
$(pwd)
) dentro del directorio/app
dentro del contenedor, establecerá el directorio de trabajo (-w /app
) en/app
. Luego ejecutará el comandochmod +x
y ejecutará el archivoasync-scraper
con los argumentos proporcionados.