Articles of Docker

如何在CentOS 7上添加语言支持(在Docker上)?

我试图将语言环境设置为日语,但docker上的CentOS图像不包括语言支持。 bash-4.2# yum groupinstall -y "Japanese Support" Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.btte.net * extras: centos.mirror.secureax.com * updates: centos.mirror.secureax.com Warning: group Japanese Support does not exist. Maybe run: yum groups mark install (see man yum) No packages in any requested group available to install or update 我已经检查了yum grouplist和yum grouplist […]

如何从脚本设置docker容器的根密码?

我有一个脚本,在主机上运行,​​并创build/启动/停止docker集装箱。 我希望脚本更改容器中的root用户的密码。 由于容器是一个SSH服务器,我试过: sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root' sshpass -p 'OLDPASS' ssh root@<container-IP> 'echo -e "NEWPASS\nNEWPASS" | passwd root' 但它不起作用。 在继续之前,花更多的时间来debugging它,我想知道是否有更聪明的方法来做到这一点。 我明白,正确的“docker方式”是制作一个由Dockerfile运行的脚本,该脚本从共享卷中提取密码并将其设置为root密码。 这听起来很复杂,但我知道如何去做,并且适用于我使用的另一个docker图像。 但是我不想这样做。 我只需要一个使用Docker或者ssh来非交互式地改变用户密码的命令。

docker – 虚拟主机 – SSL证书

我想为我在单个Jetty实例中托pipe的不同域颁发不同的SSL证书。 我不想让我的Jetty应用程序服务器与Apache。 我正在运行Jetty 6.1.22。 到目前为止,我只看到一个SSL证书的configuration,SSL的configuration发生在服务器内,这使得我相信Jetty被devise为支持单一的SSL证书。 请让我知道,如果我可以使用多个证书的Jetty。 我正在考虑迁移到JBoss应用服务器6.0,因为它离真正的应用服务器更近。 这是否可以在那里完成,这是一个支持的function? search一下后,我碰到这个: https : //stackoverflow.com/questions/208149/configure-multiple-keystores-in-jboss-depending-on-requested-hostname 是这样吗? 如果是这样,那么我认为Jetty或任何其他应用程序服务器将支持它。 我需要有2个不同的连接器 – 不同的端口或IP地址。 那么,我需要在这种情况下有Apache代理Jetty / JBoss。 沃尔特

在Docker中为MongoDB创build一个新用户

我正在使用默认的MongoDB Docker镜像,我正在尝试为数据库创build一个新的用户。 我目前正在试图这样做: FROM docker.io/mongo:3.2 MAINTAINER <alexandernst> [email protected] ADD create_ddbb.js /tmp/ RUN mongod –fork –logpath /var/log/mongodb.log \ && sleep 5 && mongo foobar /tmp/create_ddbb.js 和create_ddbb.js : db.createUser( { user: "*******", pwd: "*******************", roles: [ { role: "readWrite", db: "foobar" } ] } ); 当我构buildDockerfile时,我看到: Step 4 : RUN mongod –fork –logpath /var/log/mongodb.log && sleep 5 […]

docker集装箱没有IPv6连接

我在Docker中启用IPv6时遇到了严重的问题。 环境 该主机正在运行Debian Jessie。 这是一个虚拟服务器(KVM)。 eth0在w:xy:z :: / 64这样的networking中有一个像w:x:y:z :: 1这样的静态configuration的地址,这个地址由我的托pipe公司分配给我。 我的主机能够正常使用IPv6:Ping外部世界的作品,运行在一个容器上的网站(端口80绑定到主机:80)可以通过ipv6访问。 问题 然而,我不能从容器内访问外面的世界! 使用下面的参数重新启动docker后,我的docker0桥没有IPv6地址。 没有路由也没有网关(没有ipv6地址没有意义)。 我的Docker设置:Docker在DOCKER_OPTS中用这些参数启动 DOCKER_OPTS="–dns 8.8.8.8 –dns 8.8.4.4 –ipv6 –fixed-cidr-v6=w:x:y:z:a::/80" 一些ipv6主机configuration参数: net.ipv6.conf.all.forwarding = 1 net.ipv6.conf.default.forwarding = 1 这里是我自己创build的networking之一: root@wopr:~# docker network inspect wopr6 [ { "Name": "wopr6", "Id": "ddc192d4af2a8edc809975e84cf3e4cb82c24d4cfe970dd8e3fc7d6ff31e20ee", "Scope": "local", "Driver": "bridge", "EnableIPv6": true, "IPAM": { "Driver": "default", "Options": {}, "Config": […]

如何更改docker中正在运行的容器上的日志logging驱动程序

我有一个运行默认的日志logging驱动程序json文件的容器,并希望将其更改为syslog(新的默认值)。 docker引擎的configuration已经更新,默认情况下使用系统日志,所以创build新的容器不指定日志logging驱动程序使用syslog。 是否可以更改现有容器上的日志logging驱动程序,而不必重新创build它们? docker更新命令不支持它,编辑容器的config.v2.json并重新启动容器似乎没有效果。

我可以在nginx提供的静态文件中使用nginx环境variables吗?

如果我在nginxconfiguration中使用了一个环境variables,并且nginx被configuration为仅提供静态文件(html,js,css – 例如AngularJs应用程序),那么我有什么办法可以在nginx提供的JS文件中使用环境variables? 或者是执行此操作来运行非静态服务器的唯一方法,例如io.js,php等 顺便说一句,你不能在nginx的configuration中使用环境variables。 当我在nginxconfiguration中讨论环境variables时,我的意思就像在这篇文章中: 我如何在Nginx.conf中使用env APP_WEB_1_PORT_5000_TCP_ADDR; 环境variables env APP_WEB_1_PORT_5000_TCP_ADDR; 和$ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"}; 解释你的用例 我的具体用例是在Docker容器中有一个由nginx驱动的AngularJS应用程序。 该应用程序是一个“单页应用程序”,它使用完全在另一个系统上运行的API。 目前我在生产和分期之间运行不同的docker容器,因为应用程序有一些不同的configuration,例如Google-Analtyics代码。 这个特定于环境的数据保存在一个config.js文件中,并且这些值当前是硬编码的,git中的master分支的一个值,以及staging分支的值不同。 我想改变devise,所以我可以使用相同的容器来生产和舞台。 我想运行一个ENV var到容器中( docker run -e GACODE=UA-12345-6 … )并让nginx使用ENV var(通过env GACODE;和$ENV{"GACODE"}所以config.js文件可以使用传入的GoogleAnaltyics代码,而不是对它们进行硬编码)。 我不知道这是否可能(因此这个问题;))。 只使用nginx使我的容器是一个单一的进程,而如果我必须使用io.js,那么我将需要多个链接的容器和更多的移动部分是更复杂的)。

使用fleet / systemd重置/忽略非零退出代码

我有backup.timer每小时调用backup.service 。 不幸的是,在容器内运行的备份脚本可以成功完成, 但警告返回一个非零的退出代码。 所以,尽pipe一切都可能已经奏效了,容器会以非零的退出码停止。 所以舰队进入失败状态。 在这种情况下,计时器似乎不会再启动这个单元,尽pipe我没有在systemd文档中find任何说明。 要说清楚:对于我来说,让容器以非零的退出码停止是完全正确的。 但是,我的计时器不起作用。 我现在可以把这个脚本封装成另一个叫做als docker入口点的脚本。 但是,我将不得不确保输出的STDOUT和STDERR保持不变。 我也可以在单元失败后运行sudo systemctl reset-failed ,但是这对我来说似乎有点不好意思…(我试过了,在这种情况下,定时器再次运行了这个单元,但是它不起作用ExecStopPost在服务文件中任务) 有没有更好的方法来确保一个单位 不会进入失败状态,虽然它返回非零或 重置它的状态之后,或 告诉定时器运行该单位,尽pipe其状态失败 ?

docker的shell脚本ps -a | grepfind运行某些容器的数目

我想编写一个脚本,由我的开发构build服务器执行,在构build和运行新容器之前将删除所有“类似的”泊坞窗容器。 下面是我需要的bash脚本的伪代码 var name = $1 var number_of_results = # of containers returned from $(docker ps -a | grep "$name") if(number_of_result > 0) docker rm -f $(docker ps -a | grep "$name")

在Docker容器之间共享代码库

我有两个容器 一个用于持枪我跑django应用程序运行,另一个是芹菜任务队列。 Celery使用相同的django应用程序代码库。 当我构buildDjango docker容器时,我使用ADD . /usr/src/app ADD . /usr/src/app语句将源文件复制到容器中。 但是,Celery的Dockerfile放置在另一个文件夹中,因此不可能在文件不存在的情况下复制文件。 到目前为止我看到两种可能性: mount -o bind似乎看起来很乱 保留两份文件可能会导致不同步的情况 将源代码文件夹声明为一个卷,然后使用volumes-from启动芹菜容器。 目前我使用第三种解决scheme。 有没有更好的方法? 在dockerfile中使用git clone ? 但是,如何validation然后…