我试图在我的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 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) 在我Dockerfile使用curl或ADD下载最新版本的存档,如:
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使用curl或ADD创建自己的图像层的语句.这将用作未来执行的缓存docker build.
问题:如何禁用该指令的缓存?
在那里工作缓存失效之类的东西会很棒.例如,通过使用HTTP ETag或通过查询最后修改的头字段.这样就可以根据HTTP标头进行快速检查,以确定是否可以使用缓存层.
我知道一些肮脏的技巧可以帮助例如在RUN语句中执行下载shell脚本.它的文件名将在docker build我们的构建系统触发之前更改.我可以在该脚本中进行HTTP检查.但后来我需要将最后使用过的ETag或最后修改过的文件存储到某个文件中.我想知道是否有一些我可以使用的更干净和原生的 Docker功能,在这里.
我有一个docker-compose文件,它在同一主机中部署了8种不同的docker服务.是否可以将其部署在不同的主机中?,我想在一个主机中部署一些服务,在其他主机远程部署另一个服务.我需要使用docker-swarm吗?或者是一种更简单的方法吗?
我已经读过它可以使用DOCKER_HOST来完成,但如果我使用这个变量配置/ etc/default/docker,所有服务都将在远程主机上运行,我需要的是一个远程主机中的一些服务,以及其他其他远程主机中的服务.
我是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.我怎么能做到这一点?
DOCKERFILE有一个ENTRYPOINT参数,在编写Kubernetes部署yaml文件时,在COMMAND的Container规范中有一个参数.
我无法弄清楚有什么区别以及如何使用它们?
我想在我的 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) 我正在编写一个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) 我nignx container和我的asset container所有资产都是用咕噜声或其他工具构建的.
现在在docker compose文件中,我想挂载asset container's文件夹路径,nginx container因此nginx可以提供该文件.
我们怎么做?我不记得,但我认为有一个选项,我们可以分享一个容器与另一个容器的路径.
假设如果我将nginx扩展到2个容器,那么该挂载是否适用于所有nginx实例?
如果我扩大规模asset container那么会发生什么?
我也想和我的主人一起安装它,这样可以很容易地完成开发.
docker ×10
dockerfile ×10
caching ×1
containers ×1
curl ×1
docker-swarm ×1
kubernetes ×1
mongodb ×1
node.js ×1
timezone ×1