首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么"docker run“的错误是”没有这样的文件或目录“?

为什么"docker run“的错误是”没有这样的文件或目录“?
EN

Stack Overflow用户
提问于 2015-08-13 02:21:59
回答 1查看 7.4K关注 0票数 3

我正在尝试运行一个运行自动构建的容器。这是dockerfile:

代码语言:javascript
复制
   FROM ubuntu:14.04
    MAINTAINER pmandayam

    # update dpkg repositories
    RUN apt-get update

    # install wget
    RUN apt-get install -y wget

    # get maven 3.2.2
    RUN wget --no-verbose -O /tmp/apache-maven-3.2.2.tar.gz http://archive.apache.or
    g/dist/maven/maven-3/3.2.2/binaries/apache-maven-3.2.2-bin.tar.gz

    # verify checksum
    RUN echo "87e5cc81bc4ab9b83986b3e77e6b3095 /tmp/apache-maven-3.2.2.tar.gz" | md5
    sum -c

    # install maven
    RUN tar xzf /tmp/apache-maven-3.2.2.tar.gz -C /opt/
    RUN ln -s /opt/apache-maven-3.2.2 /opt/maven
    RUN ln -s /opt/maven/bin/mvn /usr/local/bin
    RUN rm -f /tmp/apache-maven-3.2.2.tar.gz
    ENV MAVEN_HOME /opt/maven

    # remove download archive files
    RUN apt-get clean

    # set shell variables for java installation
    ENV java_version 1.8.0_11
    ENV filename jdk-8u11-linux-x64.tar.gz
    ENV downloadlink http://download.oracle.com/otn-pub/java/jdk/8u11-b12/$filename

    # download java, accepting the license agreement
    RUN wget --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie
    " -O /tmp/$filename $downloadlink

    # unpack java
    RUN mkdir /opt/java-oracle && tar -zxf /tmp/$filename -C /opt/java-oracle/
    ENV JAVA_HOME /opt/java-oracle/jdk$java_version
    ENV PATH $JAVA_HOME/bin:$PATH

    # configure symbolic links for the java and javac executables
    RUN update-alternatives --install /usr/bin/java java $JAVA_HOME/bin/java 20000 &
    & update-alternatives --install /usr/bin/javac javac $JAVA_HOME/bin/javac 20000

    # install mongodb
    RUN echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
    ' | sudo tee /etc/apt/sources.list.d/mongodb.list && \
            apt-get update && \
                apt-get --allow-unauthenticated install -y mongodb-org mongodb-org-s
    erver mongodb-org-shell mongodb-org-mongos mongodb-org-tools && \

                    echo "mongodb-org hold" | dpkg --set-selections && \
                        echo "mongodb-org-server hold" | dpkg --set-selections && \
                            echo "mongodb-org-shell hold" | dpkg --set-selections &&
     \
                                echo "mongodb-org-mongos hold" | dpkg --set-selectio
    ns && \
                                    echo "mongodb-org-tools hold" | dpkg --set-selec
    tions

    RUN mkdir -p /data/db
    VOLUME /data/db

    EXPOSE 27017

    COPY build-script /build-script

    CMD ["/build-script"]

我可以成功地构建镜像,但是当我尝试运行容器时,我得到了这个错误:

代码语言:javascript
复制
$ docker run mybuild
no such file or directory
Error response from daemon: Cannot start container 3e8aa828909afcd8fb82b5a5ac894
97a537bef2b930b71a5d20a1b98d6cc1dd6: [8] System error: no such file or directory

“没有这样的文件或目录”是什么意思?

下面是我的简单脚本:

代码语言:javascript
复制
#!/bin/bash

sudo service mongod start

mvn clean verify

sudo service mongod stop

我像这样复制它: copy build-script /build-script

并像这样运行它: CMD "/build-script“不确定为什么它不能工作

EN

回答 1

Stack Overflow用户

发布于 2015-08-13 03:29:01

使用service是行不通的-- Docker的基础镜像非常小,不支持这种方式。如果你想运行多个进程,你可以使用supervisor或runit等。

在这种情况下,最简单的方法就是在脚本中手动启动mongo,例如/usr/bin/mongod &或任何正确的咒语。

顺便说一句,你想要清理的代码行不会有太大的效果:

代码语言:javascript
复制
RUN rm -f /tmp/apache-maven-3.2.2.tar.gz
...
# remove download archive files
RUN apt-get clean

这些文件已经提交到以前的图像层,所以这样做不会节省任何磁盘空间。相反,您必须在添加文件的同一Dockerfile指令中删除这些文件。

此外,我会考虑将基础映像更改为Java映像,这将节省大量工作。但是,如果有问题的话,您可能很难找到一个捆绑了官方Oracle JDK而不是OpenJDK的版本。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31972673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档