从dockerfile

时间:2019-08-08 15:57:10

标签: python docker conda singularity-container

我正在尝试从现有的docker映像中设置一个奇异容器,在该容器中,运行容器后立即激活名为“ tensorflow”的conda环境。我已经找到有关此主题here的一些答案。不幸的是,在本文中,他们仅说明了如何设置奇点.def文件以默认情况下激活conda环境。但是,我只想修改现有的Dockerfile,然后从中构建一个奇异的映像。

到目前为止,我尝试过的是这样设置Dockerfile:

FROM opensuse/tumbleweed

ENV PATH /opt/conda/bin:$PATH
ENV PATH /opt/conda/envs/tensorflow/bin:$PATH

# Add conda environment files (.yml)
COPY ["./conda_environments/", "."]

# Install with zypper
RUN zypper install -y sudo wget bzip2 vim tree which util-linux

# Get installation file
RUN wget --quiet https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh -O ~/anaconda.sh

# Install anaconda at /opt/conda
RUN /bin/bash ~/anaconda.sh -b -p "/opt/conda"

# Remove installation file
RUN rm ~/anaconda.sh

# Make conda command available to all users
RUN ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh

# Create tensorflow environment
RUN conda env create -f tensorflow.yml

# Activate conda environment with interactive bash session
RUN echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc
RUN echo "conda activate tensorflow" >> ~/.bashrc

# Default command
CMD ["/bin/bash"]

构建docker映像后,我使用以下命令运行docker容器:

docker run -t -d --rm --name=my_container opensuse_conda:latest

并输入以下内容的容器:

docker exec -it my_container bash

结果符合预期。 Shell会话直接在激活的“ tensorflow”环境下启动,该环境由(tensorflow)前缀指示。

要使用此docker映像构建奇异映像,请使用:

sudo singularity build opensuse_conda.sif docker-daemon://opensuse_conda:latest

并使用以下命令运行容器:

sudo singularity run opensuse_conda.sif

这是发生问题的地方。默认情况下,不是“ tensorflow”环境,而是“基本”环境。但是,当我运行奇异容器时,我宁愿激活“ tensorflow”环境。

如何修改我的Dockerfile,以便在同时运行docker容器和奇点容器时,默认环境为“ tensorflow”?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的问题是,x**2仅在启动交互式shell时才会读取,而在容器使用默认命令运行时则不会读取。有关背景信息,请参见this answer

有一堆bash startup files,您可以在其中放置.bashrc命令。我建议定义自己的文件,并将文件名放入conda activate tensorflow环境变量中。两者都可以通过Dockerfile轻松完成。