Questions tagged «docker»

Docker是构建和运行容器的工具。接受有关Dockerfile,操作和架构的问题。有关在生产环境中运行docker的问题可能会在ServerFault(https://serverfault.com/)上找到更好的响应。docker标签很少单独使用,通常与docker-compose和kubernetes等其他标签搭配使用。

5
为什么不能多次使用Docker CMD来运行多个服务?
我已经从Dockerfile建立了一个名为centos + ssh的基础映像。在centos + ssh的Dockerfile中,我使用CMD运行ssh服务。 然后我想构建一个运行其他服务的图像,该服务名为rabbitmq,Dockerfile: FROM centos+ssh EXPOSE 22 EXPOSE 4149 CMD /opt/mq/sbin/rabbitmq-server start 要启动rabbitmq容器,请运行: docker run -d -p 222:22 -p 4149:4149 rabbitmq 但是ssh服务无法正常工作,它感觉到Rabbitmq的Dockerfile CMD覆盖了centos的CMD。 CMD如何在docker映像中工作? 如果要运行多个服务,该怎么办?使用主管?
96 docker 


3
Docker和--userns-remap,如何管理卷权限以在主机和容器之间共享数据?
在docker中,从主机检查容器时,在容器内部创建的文件往往具有不可预测的所有权。默认情况下,卷上文件的所有者是root(uid 0),但是一旦非root用户帐户包含在容器中并写入文件系统,从主机的角度来看,所有者就会或多或少地变得随机。 当您需要使用调用docker命令的同一用户帐户从主机访问卷数据时,这是一个问题。 典型的解决方法是 在创建时在Dockerfile中强制用户uID(非便携式) 将主机用户的UIDdocker run作为环境变量传递给命令,然后chown在入口点脚本中在卷上运行某些命令。 这两种解决方案都可以对容器外部的实际权限进行一些控制。 我希望用户名称空间是此问题的最终解决方案。我已经对最近发布的1.10版和--userns-remap设置为我的桌面帐户进行了一些测试。但是,我不确定它是否会使挂载卷上的文件所有权更容易处理,恐怕实际上相反。 假设我启动这个基本容器 docker run -ti -v /data debian:jessie /bin/bash echo 'hello' > /data/test.txt exit 然后检查主机中的内容: ls -lh /var/lib/docker/100000.100000/volumes/<some-id>/_data/ -rw-r--r-- 1 100000 100000 6 Feb 8 19:43 test.txt 这个数字“ 100000”是我的主机用户的一个子UID,但是由于它不对应于我的用户的UID,因此我仍然无法在没有特权的情况下编辑test.txt。该子用户似乎与docker之外的我的实际普通用户没有任何亲和力。它没有被映射回来。 这篇文章前面提到的变通办法是在主机和容器之间对齐UID,由于 UID->sub-UID名称空间中发生映射,。 然后,是否有一种方法可以在启用用户命名空间的情况下运行docker(以提高安全性),同时仍使运行docker的主机用户拥有在卷上生成的文件的可能性?
96 docker 


1
docker ubuntu / bin / sh:1:locale-gen:找不到
我将下面的语言环境设置代码放入了我的dockerfile中, FROM node:4-onbuild # Set the locale RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 但这给了我错误 /bin/sh: 1: locale-gen: not found The command '/bin/sh -c locale-gen en_US.UTF-8' returned a non-zero code: 127 任何想法?
95 ubuntu  docker 

2
通过docker-compose为Docker容器提供静态IP
我正在尝试为容器提供静态IP地址。我了解我必须创建一个自定义网络。我创建了它,并且网桥接口已在主机(Ubuntu 16.x)上启动。容器从该子网获取IP,但不是我提供的静态IP。 这是我的docker-compose.yml: version: '2' services: mysql: container_name: mysql image: mysql:latest restart: always environment: - MYSQL_ROOT_PASSWORD=root ports: - "3306:3306" networks: - vpcbr apigw-tomcat: container_name: apigw-tomcat build: tomcat/. ports: - "8080:8080" - "8009:8009" networks: - vpcbr depends_on: - mysql networks: vpcbr: driver: bridge ipam: config: - subnet: 10.5.0.0/16 gateway: 10.5.0.1 aux_addresses: …

10
用Docker在OS X上设置开发环境的正确方法是什么?
介绍 我想不出一种使用Docker和Boot2Docker在OS X上设置开发环境的好方法。我遇到的问题是如何管理源代码,以便: 我可以使用已经安装的工具(文本编辑器,IDE,git等)在OS X上修改代码。 这些修改反映在Docker容器中,因此,如果我重新运行测试或刷新网页,则可以立即看到所做的更改。 从理论上讲,通过将我的源代码安装为一个卷可以很容易地做到这一点: docker run -it -v /path/to/my/source/code:/src some-docker-image 不幸的是,这有两个主要问题,使其在OS X上完全无法使用: 问题1:在VirtualBox上安装的卷(使用vboxsf)非常慢 例如,如果源代码是Docker映像的一部分,这是Jekyll编译我的主页需要多长时间: > docker run -it brikis98/yevgeniy-brikman-homepage:v1 bash root@7aaea30d98a1:/src# time bundle exec jekyll build [...] real 0m7.879s user 0m7.360s sys 0m0.600s 这是完全相同的Docker映像,除了这次,我从OS X挂载了源代码: > docker run -it -v $(pwd):/src brikis98/yevgeniy-brikman-homepage:v1 bash root@1521b0b4ce6a:/src# time bundle exec …


4
如何从DockerFile运行Docker实例?
我终于想出了如何启动和运行Docker的方法。 docker run --name my-forum-nodebb --link my-forum-redis:redis -p 80:80 -p 443:443 -p 4567:4567 -P -t -i nodebb/docker:ubuntu 我将其链接到一个redis实例,很酷。 这是从头开始的,我认为当我创建redis实例时 docker run --name my-forum-redis -d -p 6379:6379 nodebb/docker:ubuntu-redis 它从远程仓库中提取图像? NodeBB提供了一个Dockerfile https://github.com/NodeBB/NodeBB/blob/master/Dockerfile,我不太确定如何使用它。我假设我可以通过在远程上调用此Dockerfile来以某种方式创建本地环境。 这样对吗?如果是这样,如何创建指向远程对象的本地实例?


4
Docker Swarm如何实现卷共享?
Docker Swarm可以管理两种类型的存储: volume 和 bind 尽管bindDocker文档未建议这样做,因为它在本地目录(在每个群集节点上)与任务之间创建了绑定,volume但未提及实现,因此我不了解如何在任务之间共享卷? Docker Swarm如何在节点之间共享卷? 卷保存在哪里(在一个管理器上?如果有多个管理器?) 如果节点在不同网络上的不同计算机上运行,​​节点之间是否没有问题? 它会创建VPN吗?

4
如何在已停止/未启动的Docker容器中编辑文件
为了解决我的应用程序的错误并调试问题,该应用程序分布在多个容器中,我经常在容器中编辑文件: 我完全懒惰并安装nano并直接在容器中进行编辑,或者 我将cp文件从容器中移出,对其进行编辑,复制并重新启动容器 这些是进入容器构建新内容之前的中间步骤,这比上述步骤要花很多时间(当然,这只是中间步骤)。 现在,我经常中断容器的启动程序,在中断情况下,该程序要么是节点脚本,要么是python Web服务器脚本,它们通常都因语法错误而失败。 有什么办法可以保存那些容器?由于它们没有启动,因此我无法在其中执行docker exec,因此它们对我丢失了。然后在构建输入中修复有问题的文件后,我走了rm / rmi / build / run路线。 如何在停止的容器中编辑文件,或者在停止的容器中cp它们或启动外壳程序-可以修复该容器的任何方法? (似乎有点像在远程计算机上工作并破坏网络配置-这种方式“永远”失去连接,并且必须使用后备(如果存在)。) 如何从主机编辑Docker容器文件?看起来相关,但已过时。
93 bash  docker 

4
在Dockerfile中运行脚本
我正在尝试在Dockerfile的构建过程中运行脚本。但这似乎不起作用。 我尝试过这种方式: FROM php:7-fpm ADD bootstrap.sh / ENTRYPOINT ["/bin/bash", "/bootstrap.sh"] 也这样: FROM php:7-fpm ADD bootstrap.sh / RUN bash -c "/bootstrap.sh" 并且也执行我正在运行的容器: docker exec symfony /bin/bash -c "/bootstrap.sh" 似乎没有任何作用。 你知道怎么做吗?

6
Docker运行与创建
docker run和docker create命令有什么区别? 我通常使用,run但有时在文档中看到create。 Docker的--help告诉 create Create a new container run Run a command in a new container 这是否意味着run当我们需要将命令传递给新容器时使用?那么目的是create什么?
92 docker 

2
apt-add-repository:在Dockerfile中找不到命令错误
我只是在终端中制作了一个非常简单的Docker文件,基本上我做了以下工作: mkdir pgrouted cd pgrouted touch Dockerfile 现在,我在nano编辑器中打开Docker文件,并将以下命令添加到Docker文件中: FROM ubuntu MAINTAINER Gautam <gautamx07@yahoo.com> LABEL Description="pgrouting excercise" Vendor="skanatek" Version="1.0" ENV BBOX="-122.8,45.4,-122.5,45.6" # Add pgRouting launchpad repository RUN sudo apt-add-repository -y ppa:ubuntugis/ppa RUN sudo apt-add-repository -y ppa:georepublic/pgrouting RUN sudo apt-get update # Install pgRouting package (for Ubuntu 14.04) RUN sudo apt-get install …
92 docker 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.