标签: dockerfile

如何使用Dockerfile中的私钥访问GIT仓库

我试图在我的Docker容器中添加一个私钥,它可以访问我的私有git存储库.testing_git文件位于包含Dockerfile的文件夹中.我正在尝试制作一个可以动态提取git代码的容器.

这是我的Dockerfile:

FROM ubuntu:14.04.1
WORKDIR ~/.ssh
RUN apt-get -y install ssh
WORKDIR /var/www/html
Run apt-get -y install git
RUN mkdir ~/.ssh
ADD id_rsa /home/id_rsa
RUN cat /home/id_rsa && mv /home/id_rsa ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa && eval "$(ssh-agent -s)"  && ssh-add ~/.ssh/id_rsa && ssh-add -l && ssh-add -L && echo "Host github.com\n\tIdentityFile ~/.ssh/id_rsa" >> /root/.ssh/config &&  git clone git@github.com:amitbadheka/Learning-Rails
Run Code Online (Sandbox Code Playgroud)

输出:

Step 9 : RUN mkdir ~/.ssh
---> Using cache
---> 38f2824f41d6
Step 10 : ADD id_rsa /home/id_rsa
---> Using cache …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile

30
推荐指数
1
解决办法
2万
查看次数

Dockerfile:$ HOME不能使用ADD/COPY指令

在提交错误之前,我想请某人确认docker build我最近面临的奇怪行为.

考虑我们有一个简单的Dockerfile,我们试图将一些文件复制到非root用户的主目录中:

FROM ubuntu:utopic

ENV DEBIAN_FRONTEND=noninteractive

RUN sed -i.bak 's/http:\/\/archive.ubuntu.com\/ubuntu\//mirror:\/\/mirrors.ubuntu.com\/mirrors.txt\//g' /etc/apt/sources.list
RUN echo "deb http://repo.aptly.info/ squeeze main" >> /etc/apt/sources.list.d/_aptly.list
RUN apt-key adv --keyserver keys.gnupg.net --recv-keys e083a3782a194991
RUN apt-get update
RUN apt-get install -y aptly

RUN useradd -m aptly
RUN echo aptly:aptly | chpasswd

USER aptly
COPY ./.aptly.conf $HOME/.aptly.conf

COPY ./public.key $HOME/public.key
COPY ./signing.key $HOME/signing.key
RUN gpg --import $HOME/public.key $HOME/signing.key

RUN aptly repo create -comment='MAILPAAS components' -distribution=utopic -component=main mailpaas
CMD ["/usr/bin/aptly", "api", "serve"]
Run Code Online (Sandbox Code Playgroud)

这是我在尝试构建此图像时得到的结果:

    ...    
    Step 10 : …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile

30
推荐指数
2
解决办法
4万
查看次数

如何防止缓存Dockerfile指令?

在我Dockerfile使用curlADD下载最新版本的存档,如:

FROM debian:jessie
...
RUN apt-get install -y curl
...
RUN curl -sL http://example.com/latest/archive.tar.gz --output archive.tar.gz
...
ADD http://example.com/latest/archive2.tar.gz
...
Run Code Online (Sandbox Code Playgroud)

RUN使用curlADD创建自己的图像层的语句.这将用作未来执行的缓存docker build.

问题:如何禁用该指令的缓存?

在那里工作缓存失效之类的东西会很棒.例如,通过使用HTTP ETag或通过查询最后修改的头字段.这样就可以根据HTTP标头进行快速检查,以确定是否可以使用缓存层.

我知道一些肮脏的技巧可以帮助例如在RUN语句中执行下载shell脚本.它的文件名将在docker build我们的构建系统触发之前更改.我可以在该脚本中进行HTTP检查.但后来我需要将最后使用过的ETag最后修改过的文件存储到某个文件中.我想知道是否有一些我可以使用的更干净和原生的 Docker功能,在这里.

curl caching docker dockerfile

30
推荐指数
2
解决办法
2万
查看次数

Docker-compose:在多个主机中部署服务

我有一个docker-compose文件,它在同一主机中部署了8种不同的docker服务.是否可以将其部署在不同的主机中?,我想在一个主机中部署一些服务,在其他主机远程部署另一个服务.我需要使用docker-swarm吗?或者是一种更简单的方法吗?

我已经读过它可以使用DOCKER_HOST来完成,但如果我使用这个变量配置/ etc/default/docker,所有服务都将在远程主机上运行,​​我需要的是一个远程主机中的一些服务,以及其他其他远程主机中的服务.

docker dockerfile docker-compose docker-swarm

30
推荐指数
3
解决办法
1万
查看次数

使用docker run命令将参数传递给Dockerfile中的CMD

我是Docker的新手,我很难按照自己的意愿设置docker容器.我有一个nodejs应用程序启动时可以采取两个参数.例如,我可以使用

node server.js 0 dev

要么

node server.js 1 prod

在生产模式和开发模式之间切换,并确定是否应该打开群集.现在我想创建带有参数的docker镜像来做类似的事情,到目前为止我唯一能做的就是调整Dockerfile以获得一行

CMD [ "node", "server.js", "0", "dev"]

docker build -t me/app . 建造码头工人.

然后docker run -p 9000:9000 -d me/app运行docker.

但是如果我想切换到prod模式,我需要将Dockerfile CMD更改为

CMD [ "node", "server.js", "1", "prod"] ,

我需要杀死侦听端口9000的旧版本并重建图像.我希望我能拥有类似的东西

docker run -p 9000:9000 environment=dev cluster=0 -d me/app

创建一个映像并使用"environment"和"cluster"参数运行nodejs命令,因此我不需要更改Dockerfile并重建docker.我怎么能做到这一点?

node.js docker dockerfile

30
推荐指数
5
解决办法
4万
查看次数

Docker ENTRYPOINT和Kubernetes容器spec COMMAND之间的区别?

DOCKERFILE有一个ENTRYPOINT参数,在编写Kubernetes部署yaml文件时,在COMMAND的Container规范中有一个参数.

我无法弄清楚有什么区别以及如何使用它们?

containers docker kubernetes dockerfile

30
推荐指数
4
解决办法
2万
查看次数

如何在 alpine 基础 docker 镜像中设置时区?

我想在我的 Docker 容器中设置时区。我关注了这篇文章,但找不到高山基础图像的工作解决方案。你能指导一下吗?

https://dev.to/0xbf/set-timezone-in-your-docker-image-d22

timezone docker dockerfile

30
推荐指数
2
解决办法
5万
查看次数

如何使用默认集合和数据创建Mongo Docker镜像?

我需要支持来构建我自己的mongo docker镜像.

我有一个脚本列表,用于创建和插入MongoDB中的数据,这些脚本应在我的Dockerfile中调用,以提供具有默认集合和数据的docker镜像.

以下是我的Dockerfile目前的样子:

FROM mongo:latest

RUN mkdir -p /data/scripts

COPY . /data/scripts

RUN mongod --fork --logpath /var/log/mongodb.log --dbpath /data/db/

RUN FILES=scripts/*-create.js
RUN for f in $FILES; do mongo mydb $f; done

RUN FILES=scripts/*-insert.js
RUN for f in $FILES; do mongo mydb $f; done

RUN mongod --shutdown
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的选项来启动和停止mongod,并且总是两个中的一个失败,当前脚本引发以下错误:

There doesn't seem to be a server running with dbpath: /data/db
Run Code Online (Sandbox Code Playgroud)

更新

在@Matt回答之后,我可以成功运行命令链,但仍然无法在那里看到我的数据库(称为my-db),集合和数据.

当前的Dockerfile:

FROM mongo:latest

RUN mkdir -p /data/db/scripts

COPY . /data/db

RUN mongod --fork --logpath /var/log/mongodb.log --dbpath /data/db \
    && …
Run Code Online (Sandbox Code Playgroud)

mongodb docker dockerfile

29
推荐指数
3
解决办法
2万
查看次数

Dockerfile:将RUN指令输出到变量中

我正在编写一个dockerfile,并希望将"ls"命令的输出放入变量中,如下所示:

$file = ls /tmp/dir
Run Code Online (Sandbox Code Playgroud)

这里,"dir"里面只有一个文件.

dockerfile中的以下RUN指令不起作用

RUN $file = ls /tmp/dir
Run Code Online (Sandbox Code Playgroud)

docker dockerfile

29
推荐指数
3
解决办法
4万
查看次数

Docker构成如何将路径从一个容器挂载到另一个容器?

nignx container和我的asset container所有资产都是用咕噜声或其他工具构建的.

现在在docker compose文件中,我想挂载asset container's文件夹路径,nginx container因此nginx可以提供该文件.

  • 我们怎么做?我不记得,但我认为有一个选项,我们可以分享一个容器与另一个容器的路径.

  • 假设如果我将nginx扩展到2个容器,那么该挂载是否适用于所有nginx实例?

  • 如果我扩大规模asset container那么会发生什么?

  • 我也想和我的主人一起安装它,这样可以很容易地完成开发.

docker dockerfile docker-compose

29
推荐指数
1
解决办法
2万
查看次数