Questions tagged «docker»

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

6
如何使用Docker图像过滤器
我会写 docker images --filter "dangling=true" 我还可以使用其他哪些过滤器? 我可以使用这样的东西吗? docker images --filter "running=false"
82 docker 

3
何时使用Docker-Compose和何时使用Docker-Swarm
我试图了解Docker-Compose和Docker-Swarm之间的差异或相似之处。 通过阅读文档,我了解到docker-compose提供了一种将不同容器绑定在一起并在单个服务中协同工作的机制(我猜它使用的功能与--link命令用于链接两个容器的功能相同) 另外,我对docker-swarm的理解是,它允许您管理不同docker-host的集群,每个集群都在运行某些docker-images的多个容器实例。我们可以将连接定义为群集中不同容器之间的覆盖网络(即使它们跨越群集中的两个docker-hosts)以将它们作为一个单元进行连接。 我想了解的是docker-swarm成功的docker-compose和overlay网络是连接容器的新方法(推荐)吗? 还是docker-compose仍然是整个docker系列的组成部分,并且期望并建议使用它来连接容器以进行协作。如果是这样,docker-compose是否可以与群集中不同节点上的容器一起使用? 还是覆盖网络用于在群集中的不同主机之间连接容器,而docker-compose用于创建内部链接? 此外,我还看到docker文档中提到了--links不再被推荐,并且很快就会过时。 我有点困惑??? 非常感谢!

6
Kubernetes:如何设置VolumeMount用户组和文件权限
我正在使用kops在AWS上运行Kubernetes集群。我已经将EBS卷安装到了容器上,并且可以从我的应用程序中看到它,但是由于我的应用程序没有以root用户身份运行,因此它是只读的。我如何PersistentVolumeClaim以root以外的用户身份挂载a ?在VolumeMount似乎不具有任何选项来控制的用户,组或文件权限安装路径。 这是我的Deployment yaml文件: apiVersion: extensions/v1beta1 kind: Deployment metadata: name: notebook-1 spec: replicas: 1 template: metadata: labels: app: notebook-1 spec: volumes: - name: notebook-1 persistentVolumeClaim: claimName: notebook-1 containers: - name: notebook-1 image: jupyter/base-notebook ports: - containerPort: 8888 volumeMounts: - mountPath: "/home/jovyan/work" name: notebook-1

3
如何在Linux下停止Docker
我的OS版本Ubuntu 16.04。我想停止docker,所以我在终端中运行: sudo systemctl stop docker 但是此命令对我没有帮助: gridsim1103 ~: ps ax | grep docker 11347 ? Sl 0:00 containerd-shim 487e3784f983274131d37bde1641db657e76e41bdd056f43ef4ad5adc1bfc518 /var/run/docker/libcontainerd/487e3784f983274131d37bde1641db657e76e41bdd056f43ef4ad5adc1bfc518 runc 14299 pts/2 S+ 0:00 grep --color=auto docker 29914 ? S 0:00 sudo dockerd -H gridsim1103:2376 29915 ? Sl 4:45 dockerd -H gridsim1103:2376 29922 ? Ssl 0:24 containerd -l …
82 docker  daemon 



8
在企业网络上建立映像期间网络调用失败
我在公司网络上构建Docker映像时遇到问题。我刚刚开始使用Docker,因此我有一个用于hello-world类型应用程序的以下Dockerfile: # DOCKER-VERSION 0.3.4 FROM centos:6.4 # Enable EPEL for Node.js RUN rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm # Install Node.js and npm RUN yum install -y npm # Bundle app source ADD . /src # Install app dependencies RUN cd /src; npm install EXPOSE 8080 CMD ["node", "/src/index.js"] 当我在家中通过自己的无线网络在笔记本电脑上构建笔记本电脑时,这种方法效果很好。它拉下必要的依赖关系并正确构建映像。 但是,当我在公司网络上工作时,尝试从download.fedoraproject.org拉下RPM时,此同一个Docker构建失败,并显示以下错误消息: 第2步:运行rpm -Uvh …
81 dns  docker 

4
E:软件包“ mysql-client”在使用docker compose的php-fpm映像构建中没有安装候选对象
我是docker的新手,所以我尝试通过laravel项目了解更多有关docker的信息,并按照以下教程进行操作: https://www.digitalocean.com/community/tutorials/how-to-set-up-laravel-nginx-and-mysql-with-docker-compose?comment=77842 我已经根据教程中的内容对Dockerfile进行了一些调整,但是即使教程文件也会导致相同的结果。 FROM php:7.3-fpm # Copy composer.lock and composer.json COPY composer.lock composer.json /var/www/ # Install dependencies RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && \ apt-get update && apt-get install -y mysql-client \ RUN npm install -g npm # Clear cache RUN apt-get clean && rm -rf /var/lib/apt/lists/* # …

7
如何在启动时为MongoDB容器创建数据库?
我正在使用Docker,并且拥有PHP,MySQL,Apache和Redis的堆栈。我现在需要添加MongoDB,因此我正在检查Dockerfile中的最新版本以及MongoDB Dockerhub中的docker-entrypoint.sh文件,但我找不到设置默认数据库,管理员用户/密码以及可能进行身份验证的方法文件中容器的方法。docker-compose.yml 在MySQL中,您可以设置一些ENV变量,例如: db: image: mysql:5.7 env_file: .env environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} 这将设置数据库和用户/密码作为root密码。 MongoDB有什么方法可以实现相同目的吗?任何人都有经验或解决方法?

10
如何获取docker-compose以使用存储库中的最新映像
我不知道我在做什么错,但是我docker-compose up必须先从系统中完全删除旧容器,然后才能从注册表中使用最新映像。即使docker-compose pull获取了新的映像,compose似乎仍在使用先前启动的映像。 我研究了如何使docker-compose始终从新映像重新创建容器?这似乎与我的问题相似,但是那里提供的解决方案都不适合我,因为我正在寻找可以在生产服务器上使用的解决方案,因此我不想在启动它们之前先删除所有容器再次(可能丢失数据?)。我只想检测更改图像的新版本,将它们拉出,然后使用这些新图像重新启动服务。 为此,我创建了一个简单的测试项目,其中唯一的目标是在每个新版本中增加版本nr。如果浏览到创建的Nginx服务器,则会显示nr版本(这在本地可以正常工作)。 docker版本:1.11.2 docker-compose版本:1.7.1 OS:已使用docker-toolbox在CentOS 7和OS X 10.10上进行了测试 我的docker-compose.yml: version: '2' services: application: image: ourprivate.docker.reg:5000/ourcompany/buildchaintest:0.1.8-dev volumes: - /var/www/html tty: true nginx: build: nginx ports: - "80:80" volumes_from: - application volumes: - ./logs/nginx/:/var/log/nginx php: container_name: buildchaintest_php_1 build: php-fpm expose: - "9000" volumes_from: - application volumes: - ./logs/php-fpm/:/var/www/logs 在我们的jenkins服务器上,我运行以下命令来构建和标记图像 …

2
我应该使用Dockerfiles还是映像提交?
我对这两个选项有些困惑。它们似乎是相关的。但是,它们并不是真正兼容的。 例如,似乎使用Dockerfiles意味着您不应该真正提交映像,因为您实际上应该只在git中跟踪Dockerfile并对其进行更改。那么什么是权威性就没有歧义。 但是,图像提交看起来确实不错。太好了,您可以直接修改容器并标记更改以创建另一个图像。我了解您甚至可以从映像提交历史记录中获得类似文件系统差异的信息。太棒了 但是,您不应该使用Dockerfiles。否则,如果您提交了映像,则必须返回到Dockerfile并进行一些更改,以代表您的所作所为。 所以我很伤心。我喜欢图像提交的想法:您不必在Dockerfile中表示图像状态-您可以直接对其进行跟踪。但是,我对于放弃某种清单文件的想法感到不安,该清单文件使您可以快速概览图像中的内容。同样在同一软件包中看到两个似乎不兼容的功能也令人不安。 有人对此有任何想法吗?使用图像提交是否被认为是不好的做法?还是我应该放开我的附件来存放人偶时代的清单文件?我该怎么办? 更新资料: 对于所有认为这是基于意见的问题的人,我不确定。它具有一些主观上的特质,但我认为这主要是一个客观问题。此外,我相信就该主题进行良好的讨论将提供信息。 最后,我希望阅读本文的任何人都能对Dockerfile和映像提交之间的相互关系有更好的了解。 更新-2017/7/18: 我最近才发现图像提交的合法用途。我们只是在公司建立了一条CI管道,在管道的一个阶段中,我们的应用程序测试在容器内运行。在测试运行程序进程在容器的文件系统中生成覆盖结果之后,我们需要从已存在的容器中检索覆盖结果。我们使用图像提交来执行此操作,方法是提交已停止的容器以创建新图像,然后运行显示覆盖文件并将其转储到stdout的命令。所以拥有这个很方便。除了这种非常具体的情况之外,我们使用Dockerfiles定义我们的环境。
81 docker 

11
如何设置Docker容器之间的链接,以便重启不会中断它?
我有一些运行如下的Docker容器: Nginx的 网路应用程式1 网路应用程式2 PostgreSQL的 由于Nginx需要连接到Web应用程序1和2中的Web应用程序服务器,并且Web应用程序需要与PostgreSQL通讯,所以我有这样的链接: Nginx ---链接---> Web应用程序1 Nginx ---链接---> Web应用程序2 Web应用程序1 ---链接---> PostgreSQL Web应用程序2 ---链接---> PostgreSQL 起初这很好用。但是,当我开发Web应用程序1和Web应用程序2的新版本时,需要替换它们。我要做的是删除Web应用程序容器,设置新容器并启动它们。 对于Web应用程序容器,其IP地址起初类似于: 172.17.0.2 172.17.0.3 在更换它们之后,它们将具有新的IP地址: 172.17.0.5 172.17.0.6 现在,Nginx容器中那些暴露的环境变量仍指向旧的IP地址。问题来了。如何更换容器而不破坏容器之间的链接?PostgreSQL也将发生相同的问题。如果要升级PostgreSQL映像版本,我当然需要删除它并运行新的映像,但是然后我需要重建整个容器图,因此对于实际的服务器操作而言,这不是理想的选择。

16
无法使用Ubuntu在Docker容器内安装pip软件包
我遵循无花果指南,将docker与python应用程序一起使用,但是当docker掌握命令时 RUN pip install -r requirements.txt 我收到以下错误消息: Step 3 : RUN pip install -r requirements.txt ---> Running in fe0b84217ad1 Collecting blinker==1.3 (from -r requirements.txt (line 1)) Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ProtocolError('Connection aborted.', gaierror(-2, 'Name or service not known'))': /simple/blinker/ 这重复了几次,然后我又收到一条消息: Could not find any downloads …
80 python  docker  pip  fig 

2
我应该使用AWS Elastic Beanstalk还是Amazon EC2容器服务(ECS)扩展Docker容器?
我已经开发了一个基于Docker的应用程序,其中包含多个微服务。它必须使用Amazon SQS消息并进行处理。最初,我想使用AWS Elastic Beanstalk,但是后来我放弃了EC2 Container Service。现在我不知道该选择哪一个。 到目前为止,Elastic Beanstalk支持多容器环境。太好了,因为每个微服务在docker容器中都有自己的应用程序服务器。下一个问题是扩展: 我不知道缩放机制的工作原理。例如:我的Elastic Beanstalk环境中有5个docker容器。现在,只有第五个Docker容器承受着沉重的负担,因为它要处理大量的SQS消息,其他四个则几乎处于空闲状态,因为它们不需要太多的CPU或可能没有很多SQS消息。假设第5个容器运行JBoss应用程序服务器。据我所知,即使有足够的CPU /内存可用,服务器也只能消耗有限数量的并行请求。 如果JBoss Docker容器不能处理大量请求,但是有足够的CPU /内存可用,那么我当然想在同一实例上自动启动另一个Docker / JBoss容器。但是,如果我没有足够的CPU /内存怎么办?当然,我想启动第二个实例,该实例可以通过EB中的自动缩放组进行配置。现在第二个实例开始旋转,但是除第5个实例之外的每个容器都几乎处于空闲状态,我当然不希望它们在第二个实例中也产生4个不必要的容器,这将浪费资源。基于可配置参数(例如:CPU /内存/ SQS),仅应生成第5个标度,其他应按第5个标度进行缩放。 我不完全知道Amazon ECS是否正在执行此操作,或者根本不可能,但是我确实在Internet上找不到有关此主题的任何资源,通常来说,该资源是根据实例/容器进行扩展的。

9
为什么Docker映像会占用Docker不使用的磁盘空间
我已经设置了泊坞窗,并且使用了完全不同的块设备来存储泊坞窗的系统数据: [root@blink1 /]# cat /etc/sysconfig/docker # /etc/sysconfig/docker other_args="-H tcp://0.0.0.0:9367 -H unix:///var/run/docker.sock -g /disk1/docker" 请注意,/disk/1正在使用完全不同的硬盘驱动器/dev/xvdi Filesystem Size Used Avail Use% Mounted on /dev/xvda1 7.8G 5.1G 2.6G 67% / devtmpfs 1.9G 108K 1.9G 1% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/xvdi 20G 5.3G 15G 27% /disk1 /dev/dm-1 9.8G 1.7G 7.6G 18% …

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.