Tag: docker dockerfile

在定义的端口上运行RC2项目

好的,我创build了空的RC2项目,并使用VS 2015在本地运行。 现在我想使用docker将其部署到linux服务器 – 那么我的dockerfile应该如何查看? 我一直在按照这些说明 ,这就是我最终的结果: FROM microsoft/dotnet:1.0.0-preview1 COPY . /app WORKDIR /app RUN dotnet restore EXPOSE 5004 ENTRYPOINT dotnet run 然后我build立我的应用程序的形象: dockerbuild设-t my_app。 并使用以下命令运行: docker run -t -p 8080:5004 my_app 之后,我得到了图像正在运行的信息,它正在localhost:5000上侦听。 不幸的是,我一直试图用xxxx:5000,xxxx:5004和xxxx:8080连接到这个服务器,并且这些地址都没有工作(xxxx是服务器地址)。 难道我做错了什么?

如何在每个“exec”命令中执行Docker镜像的入口点?

在试图用DockerspectestingDockerfiles之后,我终于遇到了一个我无法正确解决的问题 。 我想,问题在于Docker本身。 如果我理解它的过程, 一个入口点只在运行时执行 ,但是如果容器保持启动状态,我启动一个“exec”命令,它不会被重新调用。 我认为这是想要的行为。 但是,如果入口点是所有命令之前的“gosu”脚本,这是一个问题… 例 “myImage”有这个入口点:gosu gosu 1000:1000 "$@" 如果我启动: docker run -it myImage id -u 输出是“1000”。 如果我启动一个容器: docker run -it myImage bash 在这个容器中, id -u输出“1000”。 但是如果我在这个容器中启动一个新的命令,它会启动一个新的shell,并且不会执行入口点,所以:docker docker exec CONTAINER_ID id -u 输出“0”,因为新的shell以“root”身份启动。 有没有一种方法来执行每个入口点? 或者重新使用shell打开? 或者更好的方法来做到这一点? 或者,也许我什么都不懂? ;) 谢谢 ! 编辑 在阅读了这里提出的解决scheme之后,我明白问题不在于Docker的工作方式,而在于Serverspec如何工作。 我的目标是直接testing一个命令作为docker docker run参数,但是Serverspec使用docker exec启动一个容器和testing命令。 所以,最好的解决办法是find如何获得由Serverspec执行的docker run的标准输出。 但是,在我个人的使用情况下,最好的解决办法可能是不使用Gosu,但 – 用户标志:)

在AWS EC2实例的dockerfile中运行git clone作为主机和私有git存储库时,主机validation失败错误

我正在使用AWS ec2实例作为私人git存储库。 这个实例也用于运行Dockerfile,Docker文件尝试从这个私有存储库检出代码。 我的基本设置完成按照https://alvinabad.wordpress.com/2013/03/23/how-to-specify-an-ssh-key-file-with-the-git-command/选项2.但是,当我运行我的docker生成命令: $ sudo docker build -t“spring-petclinic”。 构build脚本停在行: RUN /root/.ssh/git.sh -i /root/.ssh/.pem克隆ec2-user@ec2-xx-xxx-xxx-xxx.compute-1.amazonaws.com:/ usr / local / git-回购/弹簧petclinic.git 并得到以下错误: “克隆到”spring-petclinic“…主机密钥validation失败致命:无法从远程存储库读取,请确保您拥有正确的访问权限并存在存储库。 我已经通过谷歌search这种types的错误,类似的设置,但无法search。 请帮忙!!! 谢谢

在维护Docker镜像时,如何处理Perl模块更新?

我正在构build一个docker镜像,以便能够运行我们所有的Perl应用程序。 应用程序需要安装数百个CPAN模块。 docker图像的完整版本需要大约一个小时才能完成。 做完初始图像之后,我不确定如何最好地处理正在进行的更新。 我们可以在git中保留一个Dockerfile,然后根据需要进行修改,并将新的构build推送到dockerhub。 但是,如果构build的人没有全部的中间映像,那么添加一个CPAN模块可能是一个非常单调乏味的过程,他们甚至可能需要一个小时才能知道新模块是否安装正确。 另外,它会再次下载每个CPAN模块,这似乎有点冒险,因为新模块可能会发生突变。 或者,进行构build的人可以拖动最新的docker-hub镜像,然后以交互方式安装cpan模块,提交构build并将新镜像推送到dockerhub。 但是,我们只有我们的dockerhub图像,但不是主要的Dockerfile。 或者,另一个选项是为每个新的构build创build一个Dockerfile,它引用了以前的dockerhub映像。 这似乎过于复杂,但。 选项1)似乎是错误的。 我相当肯定,我们不希望从基本操作系统重build整个映像只是为了安装一个额外的模块。 然而,依赖于没有Dockerfiles的图像似乎也是有风险的。

/ bin / sh:apt-get:找不到

我正在尝试更改dockerFile以使用aspell。 我有一个bash脚本,我想在docker中包装 Step 4: Wrap the script in a Docker container. The sample SDK we downloaded earlier contains an example of an action wrapped in a Docker container. In particular, the sample SDK includes a Dockerfile that builds the C program in client/example.c and installs the binary as /blackbox/client/action . The key line in the […]

Bash大括号扩展不能在Dockerfile RUN命令上工作

我在Dockerfile中运行以下RUN命令,期望在每个列出的子目录下创build一个“logs”目录: RUN mkdir -p /opt/seagull/{diameter-env,h248-env,http-env,msrp-env,octcap-env,radius-env,sip-env,synchro-env,xcap-env}/logs 但是,当我检查图像时,我看到一个字面上的名字叫做“{diameter-env,h248-env,http-env,msrp-env,octcap-env,radius-env,sip-env,synchro-env,xcap-env }“/ opt / seagull下创build,而不是扩展支撑。 我可能做错了什么?

在下载资源时,有什么策略可以使Dockerfile指令caching无效

我们的一些Docker映像需要从Nexus服务器或互联网上下载更大的二进制文件,因为互联网负责分发Java,Node.js,Mobile(Android和iOS)应用程序。 例如,使用ADD或者RUN指令来下载。 RUN curl -o docker https://get.docker.com/builds/Linux/x86_64/docker-latest 考虑到“docker build”命令将根据文件的mtime来查看指令和caching,在构build这些映像时利用caching机制的方法是什么,避免重新下载整个二进制文件? https://stackoverflow.com/a/26612694/433814 。 另一个问题是如果资源发生变化,Docker将不会下载最新版本。

如何构build一个Java应用程序的docker容器

我想要做的是为我的Java应用程序构build一个docker镜像,但是对于大多数编译语言来说,下面的考虑应该是真实的。 问题 在我的构build服务器上,我想为我的应用程序生成一个docker镜像作为交付物。 为此,我必须使用一些构build工具(通常是Gradle,Maven或Ant)来编译应用程序,然后将创build的JAR文件添加到泊坞窗图像中。 因为我希望Docker镜像只执行JAR文件,所以我将从已经安装了Java的基础镜像开始。 有三种方法可以做到这一点: 让构build工具控制过程 在这种情况下,我的构build工具控制整个过程。 所以它准备了JAR文件,在创buildJAR之后,它会调用Docker来创build映像。 这是因为事先创build了JAR,而Docker可能忘记了创buildJAR所需的构build过程。 但是我的Dockerfile不再是独立的。 它取决于在Docker之外发生的步骤。 在我的Dockerfile中,我将有一个COPY或ADD语句,它应该将JAR文件复制到图像中。 当事先未创buildjar时,这个语句会失败。 所以只是执行Dockerfile可能不起作用。 如果您想要使用DockerHub上的自动构buildfunction来构build使用当前Dockerfile的服务,就会成为一个问题。 让Docker控制构build 在这种情况下,创build映像所需的所有步骤都会添加到Dockerfile中,以便通过执行Docker构build来创build映像。 这种方法的主要问题是没有办法添加到Dockerfile命令,这些命令应该在创build的docker镜像之外执行。 这意味着我必须将我的源代码和构build工具添加到泊坞窗图像中,并在图像中构build我的JAR文件。 这将导致我的图像比它必须是由于所有添加的文件在运行时将是不必要的。 这也会为我的图片添加额外的图层。 编辑: 正如@ adrian-mouat指出,如果我要添加源,build立应用程序并删除一个RUN语句中的源,我可以避免添加不必要的文件和图层到Docker镜像。 这将意味着创造一些疯狂的链式命令。 两个独立的版本 在这种情况下,我们将构build分为两部分:首先,使用构build工具创buildJAR文件,并将其上传到存储库(Maven或Ivy存储库)。 然后,我们触发一个单独的Docker构build,它只是从存储库中添加JAR文件。 结论 在我看来,更好的方法是让构build工具控制过程 。 这将导致一个干净的docker形象,因为图像是我们想要传递这是重要的。 为了避免有一个潜在的不工作的Dockerfile应该被创build作为构build的一部分。 所以没有人会意外地使用它来开始一个破碎的构build。 但是这不允许我与DockerHub集成。 题 有没有另一种方法我失踪?

如何在docker中运行mongod后运行mongorestore

我试图设置一个与docker的mongodb服务器,让它从网上下载一个转储,并填充该信息。 我的问题是,我可以让它运行并填充数据库,但完成后,它只是closures。 这就是我解决我的问题的方法: sudo -u mongodb /usr/bin/mongod –config $conf $args & mongorestore dump 这里的问题是,如果mongod没有运行,我不能运行mongorestore ,但是如果我用mongod &启动mongod,那么在mongorestore运行完成后容器将closures。 在我的Dockerfile中 ,我通过执行CMD ["/etc/mongod/mongostart.sh"]运行这些命令。

在Docker CMD中执行后台进程的命令

我正在使用Dockerfile创build一个docker镜像。 我想在启动Docker容器时执行一些脚本。 目前我有一个shell脚本来执行所有必要的过程 CMD [“sh”,“start.sh”] 我想执行一个在后台运行的进程的shell命令 CMD [“sh”,“-c”,“mongod –dbpath / test&”]