Tag: docker dockerfile

Docker运行tomcat错误

当我试图运行这个命令时遇到了一些问题 docker run -d -t -p 203:22 -p 7003:8080 -v /home/test/webapps:/usr/local/tomcat8/webapps/ –name tomcat3 tomcat 这个命令可以正确执行,但是docker中的tomcat服务器将会像这样停止: 07-Mar-2017 10:10:24.341 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat8/webapps/examples 07-Mar-2017 10:10:25.011 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat8/webapps/examples has finished in 669 ms 07-Mar-2017 10:10:25.011 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat8/webapps/host-manager 07-Mar-2017 10:10:25.069 INFO [localhost-startStop-1] […]

如何使用不同的configuration文件在Docker上运行Redis?

我想在运行在docker上的Redis服务器上设置一个密码。 我已经按照https://registry.hub.docker.com/_/redis/上的说明进行操作 : 1.我已经创build了一个包含Dockerfile的文件夹: FROM redis COPY redis.conf /usr/local/etc/redis/redis.conf CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ] 2.我已经添加了一个redis.conf文件: requirepass thepassword 3.我使用以下方法build立图像: docker build -t ouruser/redis . 我开始了这个容器: docker run –name my-redis -p 0.0.0.0:6379:6379 -d ouruser/redis redis-server –appendonly yes redis服务器没有任何密码! 我不懂为什么。

Docker远程API不会列出容器

我有本地安装docker服务器运行一个容器。 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3d7ef4f6bb0a debian "/bin/bash" 7 hours ago Up 7 hours 0.0.0.0:80->2376/tcp nostalgic_fermat 当我尝试使用docker remote API来获取关于这个容器的信息时,我没有看到有关在主机上运行的容器的json输出。 rest的结果是: wget -v 192.168.99.100:2376/containers/json/ –2016-01-16 23:57:20– http://192.168.99.100:2376/containers/json/ Connecting to 192.168.99.100:2376… connected. HTTP request sent, awaiting response… 200 No headers, assuming HTTP/0.9 Length: unspecified Saving to: 'index.html.3' index.html.3 [ <=> ] 7 –.-KB/s […]

如何覆盖docker运行行中的CMD命令

如何根据Docker文档replacecdm: https : //docs.docker.com/reference/builder/#cmd 您可以覆盖CMD命令 Dockerfile: RUN chmod +x /srv/www/bin/* & chmod -R 755 /srv/www/app RUN pip3 install -r /srv/www/app/pip-requirements.txt EXPOSE 80 CMD ["/srv/www/bin/gunicorn.sh"] docker运行命令是: docker run –name test test/test-backend 我试过了 docker run –name test test –cmd ["/srv/www/bin/gunicorn.sh"] docker run –name test test cmd ["/srv/www/bin/gunicorn.sh"] 但控制台说这个错误: System error: exec: "cmd": executable file not found in […]

如何在构build映像时自动运行Docker容器?

如果我错过了一些明显的事情,我对docker工人很陌生 我的Dockerfile的计划。 拉tomcat:7.0 启动服务器 下载帮助文件并解压缩。 下载所需的war文件并将其重命名为ROOT.war。 我设法通过手动运行这些命令来做到这一点。 docker run -it –rm -p 8888:8080 tomcat:8.0 然后手动做wget和重命名,虽然我想这一切都在docker文件中完成。 这是我迄今为止设法做到的。 FROM tomcat:7.0 RUN /bin/bash -c "cd /usr/local/tomcat/webapps" RUN /bin/bash -c "wget -O files.zip https://***" RUN /bin/bash -c "unzip files.zip" RUN /bin/bash -c "rm -r ROOT" RUN /bin/bash -c "wget -O ROOT.war https://***" 虽然我不知道如何从早期的docker run -it –rm -p 8888:8080 tomcat:8.0 […]

在Dockerfile中将数据写入文件

我有一个shell脚本script.sh,它将一些行写入一个文件: #!/usr/bin/env bash printf "blah blah blah blah\n" | sudo tee file.txt 现在在我的Dockerfile中,我添加这个脚本并运行它,然后尝试添加生成的file.txt : ADD script.sh . RUN chmod 755 script.sh && ./script.sh ADD file.txt . 当我这样做,我只是得到一个错误引用ADD file.txt . 命令: lstat file.txt: no such file or directory 为什么docker不能find我的shell脚本生成的文件? 我能在哪里find它?

如何从检查docker集装箱中抓取暴露的港口?

假设我使用以下命令启动docker容器 docker run -d –name my-container -p 1234 my-image 并运行docker ps显示该图像的端口绑定是… 80/tcp, 443 /tcp. 0.0.0.0:32768->1234/tcp 有没有一种方法,我可以使用docker inspect抓住被分配映射到1234端口(在这种情况下,32768)? 类似于使用以下命令parsing和获取IP地址… IP=$(docker inspect -f "{{ .Networksettings.IPAddress }} my-container) 我希望能够做到类似于以下内容 ASSIGNED_PORT=$(docker inspect -f "{{…}} my-container) 我不知道是否有方法通过Docker做到这一点,但我会想象有一些命令行的魔术(grep,sed等)可以让我做这样的事情。 当我运行docker inspect my-container并看看NetworkSettings …我看到以下内容 "NetworkSettings": { … … … "Ports": { "1234/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "32768" } ], "443/tcp": null, "80/tcp": […]

如何在每个“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。 请帮忙!!! 谢谢