Docker image issue
Closed this issue · 9 comments
it appears that there is an issue with the docker container. When I run the command set on the README, I get:
docker run quay.io/mbhall88/rasusa:joss_paper
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown.
ERRO[0008] error waiting for container: context canceled
Hi @genignored,
Thanks for pointing this out. It turns out bash is installed in a different location in the official bash container. This should be fixed now if you run docker run quay.io/mbhall88/rasusa:9bbd6a4 --help
. It will also be released in version 0.6.1 once you confirm this works for you. Could you please close this issue when you confirm this has fixed your problem?
Hi @mbhall88
Sorry to butt in, just trying this myself. FWIW, I get the following:
% docker run quay.io/mbhall88/rasusa:9bbd6a4 --help
error: The following required arguments were not provided:
--bases <bases>
--coverage <FLOAT>
--genome-size <size|faidx>
--input <input>...
USAGE:
rasusa --bases <bases> --compress-level <1-9> --coverage <FLOAT> --genome-size <size|faidx> --input <input>...
For more information try --help
I guess I don't use these sorts of commands as it makes it difficult to run the container interactively with docker run -it
: https://github.com/mbhall88/rasusa/blob/master/Dockerfile#L21
But that's your call of course :)
Sorry for the delay. Yes, it will at least download and run, but as Evan mentions above, it doesn't actually call the help statement.
Hi both,
Thanks for the info. I think this is fixed now in ca421f5 (I have tested your command locally with the latest image @evanbiederstedt and it works as expected). Let me know if there are still problems.
docker run quay.io/mbhall88/rasusa:ca421f5 --help
Hi @mbhall88
Yes, that works for me. I think you could close this ticket.
Personally, I like writing Docker images such that I can use them interactively e.g. docker run -it image /bin/bash
and then I can use the command rasusa
if I wish.
But that's your call :)
Thanks for the help and great tool!
Excuse my ignorance (I never use docker to run containers - I use singularity) - but doesn't the exec command allow you to do that? https://docs.docker.com/engine/reference/commandline/exec/
Hi @mbhall88
Sorry for hijacking this entire issue...
(I never use docker to run containers - I use singularity)
I'm pretty sure Singularity works the same way in this regard. They're essentially the same in terms of the API, and what they do.
All I am saying is the following:
Let's say I modify your Dockerfile slightly, like this:
FROM rust:1.54 AS builder
COPY . /rasusa
WORKDIR /rasusa
ARG TARGET="x86_64-unknown-linux-musl"
RUN apt update \
&& apt install -y musl-tools \
&& rustup target add "$TARGET" \
&& cargo build --release --target "$TARGET" \
&& strip target/${TARGET}/release/rasusa
The command docker run -it container
will pull the image if it's not already downloaded, and you'll interactively use it.
docker run -it container_name /bin/bash
I'll find myself using the Linux OS from rust:1.54
as root. I can then interactively run rasusa however I want, and possibly mount local volumes to work with data, etc.
root@56700e6f1d3c:/rasusa# pwd
/rasusa
root@56700e6f1d3c:/rasusa# cd /rasusa/target/x86_64-unknown-linux-musl/release
root@56700e6f1d3c:/rasusa/target/x86_64-unknown-linux-musl/release# ls
build deps examples incremental rasusa rasusa.d
root@56700e6f1d3c:/rasusa/target/x86_64-unknown-linux-musl/release# ./rasusa --help
rasusa 0.6.0
Randomly subsample reads to a specified coverage.
USAGE:
rasusa [FLAGS] [OPTIONS] --bases <bases> --coverage <FLOAT> --genome-size <size|faidx> --input <input>...
FLAGS:
....
It's just how I normally use containers, fwiw. It provides the user more flexibility, e.g. to hook into Snakemake or Nextflow, or just do a quick analysis using the container.
The following might have good tips as well:
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
Hey @evanbiederstedt ,
Thanks for the context.
Looking at https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#entrypoint it seems
The best use for ENTRYPOINT is to set the image’s main command, allowing that image to be run as though it was that command
In this case it would be rasusa.
I do see what you're saying though. This isn't an issue for singularity as you can use the shell
command to do what you're trying to do with docker - i.e., get an interactive shell inside the container.
You can do this with docker by overriding the entrypoint
docker run -it --entrypoint bash quay.io/mbhall88/rasusa
Hi @mbhall88
This is a very good point, and apologies for getting too opinionated here :)
You can do this with docker by overriding the entrypoint
I'd totally forgotten about this flag! (If I had ever learned it previously...) Thank you for showing me this! That's exceptionally useful.
I've gotten used to docker run -it image /bin/bash
but the above makes far more sense.
Anyways, I think this issue is definitely solved now. Thank you, Michael!