Tag: linux containers

Docker MAC地址生成

我有一个关于在Docker容器和UUID生成中运行的应用程序的问题。 这是我们的场景: 目前我们的应用程序正在使用事件驱动框架。 对于我们根据mac地址生成UUID的事件,pid, 时间戳和计数器。 为了在像CoreOS这样的分布式系统上运行容器(虽然机会非常非常低),但不能保证用于生成UUID的所有参数对于每个容器都是唯一的,因为集群中一个服务器上的一个容器可以生成UUID使用相同的mac,pid,时间戳和计数器作为集群上的另一个容器。 实质上,如果这两个UUID都是生成一个事件并发送给我们的消息总线的话,那么显然会有冲突。 在我们的分析中,这种情况似乎归结为每个Docker容器上的mac地址的唯一性。 所以要坦率地说: 容器内的MAC地址有多独特? 如果没有手动设置,如何生成MAC地址?

Linux命名空间:networking命名空间是否可以存在而不与进程关联?

ip netns创build对/var/run/ns (命名的)networking命名空间的引用,这可以很容易地被跟踪。 同样,可以通过/proc/[pid]/ns/net来确定。 但是,一些自定义程序可能会创build一个networking并将相应的inode保存在其他非常规位置。 这可能难以确定是否有净ns我们可以列出。 其次,当进程退出时, unshare <cmd>会破坏networking,这很好。 但是,即使在命令/进程退出之后, ip netns exec <netns> <cmd>仍将保留ns。 所以我相信,任何自定义程序都可以做到这一点。 因此,问题是:一个自定义程序是否有可能创build一个未命名的networkingns,并且它与任何进程都没有关联 ? 此外,是否有可能从用户空间列出这样的(隐藏的)ns,因为我们不知道到inode的path? (当然内核有一个ns的链表)一段代码会有帮助。

如何configurationDocker容器可以通过主机外部的container_ip:port访问?

我有一台主机,有多个IP地址分配给一个networking接口。 我想configurationDocker为了使容器“响应”每个IP地址分配给主机的IP地址。 这可以用libcontainer来完成,还是必须使用LXC驱动程序,并使用–lxc-conf="lxc.network…"运行我的容器? 提前致谢。 UPDATE 我希望每个容器都可以从外面到达; 与默认的Dockerconfiguration,我只能暴露一个端口,并通过host_ip:exposed_port而不是container_ip:port到达容器。 第二个选项可以以某种方式configuration吗?

创buildcouchbase时Docker错误 – ulimit:打开文件:无法修改限制:操作不允许

我正在尝试为Couchbase创build一个docker镜像,并且在CentOS镜像上得到了dockerfile的错误信息。 # expose default port EXPOSE 8091 ENV PATH $PATH:/opt/couchbase/bin RUN cd /var/tmp &&\ wget http://packages.couchbase.com/releases/2.5.0/couchbase-server-enterprise_2.5.0_x86_64.rpm &&\ rpm -ivh couchbase-server-enterprise_2.5.0_x86_64.rpm &&\ chkconfig couchbase-server on &&\ service couchbase-server start #add start script to the container ADD start /start #make the script executable RUN chmod 0755 /start EXPOSE 11211 11210 11209 4369 8092 18091 18092 11214 11215 […]

Docker轨道迁移

我试图让docker和fig运行我的rails应用程序,它也包含redis服务器,mongodb,postgres和nginx,下面是我的fig.yml的样子: pg: image: docker-index.my.com/postgres ports: – 5432 redis: image: docker-index.my.com/redis ports: – 6379 mongodb: image: docker-index.my.com/mongodb ports: – 27017 app: build: . command: bundle exec rails s volumes: – .:/beesor ports: – 3000:3000 links: – pg – redis – mongodb environment: RAILS_ENV: production 一切工作正常,直到启动应用程序的时刻,因为轨道初始化器钩在服务器启动,然后我得到有关数据库连接的错误,数据库不存在! 当然,因为它没有在Dockerfile上创build(见下文) Dockerfile内容: # DOCKER-VERSION 0.10.0 FROM docker-index.my.com/ruby:1.9.3 MAINTAINER my.com RUN apt-get […]

如何在运行的docker容器中dynamic地编辑文件

背景 我已经build立了一个npm服务器(sinopia)docker镜像( https://github.com/feuyeux/docker-atue/blob/master/docker-images/feuyeux_sinopia.md ),并且在CMD行中,它将启动每当容器生成时。 CMD ["/opt/sinopia/start.sh"] 这个shell会dynamic地创build一个yaml文件。 sed -e 's/\#listen\: localhost/listen\: 0.0.0.0/' -e 's/allow_publish\: admin/allow_publish\: all/' /tmp/config.yaml > /opt/sinopia/config.yaml 题 我希望我可以在容器运行时编辑这个config.yaml,因为我希望内容应该按需更改。 看快照照片 如上所示,第一行运行一个sinopia容器,在这个容器中,有/opt/sinopia/config.yaml。 但我不知道如何获得这个正在运行的容器,并编辑和检查这个文件。 如果我做了sinopia-ls的行,那么有一个新的容器运行,而不是运行之前的容器。 多谢你们! 答案(详情请看下面我接受的) sudo nsenter –target $PID –mount –uts –ipc –net –pid root@58075317e47d:/# ls /opt/sinopia/ config.yaml config_gen.js start.sh storage root@58075317e47d:/# cat /opt/sinopia/config.yaml