标签: docker-compose

Docker Compose 第 2 版“卷”语法应该是什么样子的?

使用Docker Compose v1.6.0+,现在有一个新的/版本 2 文件语法docker-compose.yml。这些更改包括一个名为 的单独顶级密钥volumes。这允许在一个地方“集中”卷定义。

我想要做的是在那里命名卷,并在我的本地主机磁盘上有一个单一的卷引用多个路径。下面是一个例子,抛出一个以 aTraceback结尾的异常

AttributeError: 'list' object has no attribute 'items'
Run Code Online (Sandbox Code Playgroud)

示例docker-compose.yml

version: '2'

services:
  db:
    image: postgres
    volumes:
      - database:/var/lib/postgres/data

  php:
    image: php-fpm:5.6
    volumes:
      - phpconf:/etc/php/conf.d

  namedvolume:
    container_name: namedvolume
    build: ./Docker/Testvolume
    volumes: 
      - ./Docker/Testvolume/shareme

volumes:
  database:
    - ./Docker/Postgres/db:ro
    - ./Docker/Postgres/ini
  phpconf:
    - ./Docker/PHP-FPM/conf
  singledir: ./Docker/foo
  completemap: ./Docker/bar:/etc/service/conf.d
  - namedvolume:/etc/service/conf.d # < this was a separate attempt w/o the other keys
  … ?
Run Code Online (Sandbox Code Playgroud)

到目前为止,我通读了所有Docker …

docker docker-compose

46
推荐指数
4
解决办法
9万
查看次数

将 Docker 配置为不使用 172.17.0.0 范围

由于强制门户和默认 Docker IP 范围的问题,我试图让 Docker 使用 198.18.0.0 范围,而不是 172.17.0.0,这与我住的火车上使用的强制门户冲突。

按照docs,我创建了/etc/docker/daemon.json,并将以下内容放入其中:

{
    "bip":"198.18.0.0/16"
}
Run Code Online (Sandbox Code Playgroud)

这适用于 docker0,但它似乎没有影响任何其他网络,并且使用 docker compose 创建的第一个网络是 172.17.0.0,它重新创建了冲突。

我该怎么做才能更改所有docker 网络的默认子网(最好不必在每个撰写文件中声明我的自定义 IP 范围)?

docker docker-compose

42
推荐指数
3
解决办法
6万
查看次数

检查容器/服务是否使用 docker-compose 运行

我正在使用docker-compose.

一些命令喜欢up -d service_namestart service_name正在立即返回,如果您不希望运行的容器依赖于 shell 的状态,这非常有用,就像它们对常规up service_name. 一个用例是从某种连续的集成/交付服务器运行它。

但是这种运行/启动服务的方式并没有提供任何关于服务实际状态的反馈。

命令Docker Compose CLI 参考up确实提到了相关选项,但是,对于 version 1.7.1,它与-d以下内容互斥:

--abort-on-container-exit  Stops all containers if any container was stopped.
                           *Incompatible with -d.*
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式手动检查容器是否确实在工作并且没有因为某些错误而停止吗?

docker docker-compose

40
推荐指数
4
解决办法
5万
查看次数

“重启:始终”策略如何在 docker-compose 中工作?

我有 docker compose 文件与 PostgreSQL 和我的应用程序,如下所示:

version: '3'

services:
  postgresql:
    image: postgres:9.6.6
    ports:
      - 9932:5432
    expose:
      - "5432"
    environment:
      - POSTGRES_PASSWORD=pass
    restart: always
    volumes:
      - /data:/var/lib/postgresql/data

  myapp:
    image: myapp
    links:
      - postgresql
    depends_on:
      - "postgresql"
    restart: always
    ports:
      - "5000:5000"
Run Code Online (Sandbox Code Playgroud)

问题是restart: always当我杀死容器(使用 模拟应用程序崩溃docker kill)并且 docker-compose 不会重新启动我的容器时,策略似乎不起作用,即使退出代码是 137。当我使用restart: on-failure策略时,我观察到相同的行为。版本23docker-compose 的行为相同。我的系统是 Ubuntu Server 16.04 x64。

我的问题是:

  1. 为什么 docker-compose 不重启崩溃(被杀死)的容器?
  2. 如何检查重启策略是否有效?

docker docker-compose

40
推荐指数
1
解决办法
8万
查看次数

Docker 将匿名卷转换为命名卷

我已经使用 docker 命令行尝试了一个 docker 镜像,但没有指定卷的名称。现在我发现我想继续使用这个容器/图像,但是通过在 docker compose 中定义容器。

保留匿名/未命名卷中的数据并在 docker compose 创建的新容器中使用它们的最佳实践是什么?

  • 我可以以某种方式将未命名的卷转换为命名的卷吗?
  • 或者我应该使用 docker compose 创建一个带有命名卷的新容器并复制数据?
  • 或任何其他选择?

docker docker-compose

16
推荐指数
2
解决办法
6506
查看次数

如何以及在何处使用 Docker 为 php-fpm 配置 pm.max_children?

在使用 Nginx 和 PHP-FPM 的 Web 应用程序中,我注意到缓慢和分析日志的时刻,我发现了这条消息,它不时出现:

[19-Nov-2017 19:24:09] WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
Run Code Online (Sandbox Code Playgroud)

经过一番研究,我增加了 php.ini 配置文件中的值,停止并删除了 php 容器并重建它,因为设置为卷上文件的设置有效。

分析容器内的配置文件,它是我设置的新值,但是,关于 pm.max_children (5) 的错误消息继续出现。

Here is my docker-compose.yml

version: '2'

services:           

    pi_web:
        build: ./nginx
        ports:
            - "80:80"
            - "443:443"

        volumes:
            - ../src:/src
            - ./nginx/conf.d:/etc/nginx/conf.d
            - ./nginx/nginx.conf:/etc/nginx/nginx.conf
            - /etc/letsencrypt:/etc/letsencrypt

    pi_php:
        build: ./php
        volumes:
            - ../src:/src
            - ./php/config/php.ini:/usr/local/etc/php/php.ini
Run Code Online (Sandbox Code Playgroud)

这是 ./php/config/php.ini 的一个片段:

pm = dynamic
pm.max_children = 40
pm.start_servers = 15
pm.min_spare_servers = 15
pm.max_spare_servers …
Run Code Online (Sandbox Code Playgroud)

nginx php-fpm docker docker-compose

13
推荐指数
2
解决办法
1万
查看次数

无法访问mysql docker

我正在使用docker-compose创建mysql容器。我得到主机 IP 172.21.0.2。但是当我连接mysql时。我得到错误:

  1. 我的docker-compose.yml

    version: '2'
    services:
    
    ### Mysql container
        mysql:
          image: mysql:latest
          ports:
           - "3306:3306"
          volumes:
           - /var/lib/mysql:/var/lib/mysql
         environment:
           MYSQL_ROOT_PASSWORD: root
           MYSQL_DATABASE: test_db
           MYSQL_USER: test
           MYSQL_PASSWORD: test_pass
    
    Run Code Online (Sandbox Code Playgroud)
  2. 获取我的主机 IP docker inspect db_mysql_1 | grep IPAddress

    "IPAddress": "172.21.0.2",

  3. 访问 mysql: mysql -h 172.21.0.2 -P 3306 -u root -proot.

    ERROR 1130 (HY000): Host '172.21.0.1' is not allowed to connect to this MySQL server

如何连接到mysql容器?

mysql docker docker-compose

12
推荐指数
1
解决办法
5万
查看次数

用于 nginx 和 nodejs 服务器的 docker-compose

我有以下docker-compose.yml文件:

version: '3'
services:
    server:
        build:
            context: ../../
            dockerfile: ./packages/website/Dockerfile
        command: node /cutting/index.js
        environment:
            PORT: 8000
            NODE_ENV: production
        restart: always
    nginx:
        build:
            context: ./
            dockerfile: ./nginx/Dockerfile
        command: tail -f /dev/null
        depends_on:
            - server
        ports:
            - "8000:8000"
        restart: always
Run Code Online (Sandbox Code Playgroud)

以及以下内容nginx.conf

worker_processes 1;

user nobody nogroup;
pid /tmp/nginx.pid;
error_log /tmp/logs/nginx.error.log;

events {
    worker_connections 1024;
    accept_mutex off;
}

http {
    include mime.types;
    default_type application/octet-stream;
    access_log /tmp/logs/nginx.access.log combined;
    sendfile on;

    server {
        proxy_http_version 1.1; # this is essential for chunked …
Run Code Online (Sandbox Code Playgroud)

nginx node.js docker docker-compose

11
推荐指数
1
解决办法
1万
查看次数

如何在没有配置文件的情况下执行 docker-compose down 操作?

当您这样做时docker-compose up,它是基于docker-compose.yml文件的。

这通常会启动一个网络,构建并运行多个服务。如果您使用该标志执行 up 操作-ddocker-compose客户端将分离并让服务器单独操作。

如果执行 a docker-compose down,它会关闭正在运行的容器,并删除相应的网络。

但是...如果之后文件消失了怎么up.yml

问题

docker stop您是否必须通过手动查找该项目的服务等等来docker rm手动关闭docker network rm

或者docker-compose足够智能,可以用标签标记所有东西(容器、网络等),这样你就可以告诉它一些东西,这样docker-compose down project-name它就不会在.yml(现在不在文件系统中)文件中查找,而是检查正在运行的实例和网?

configuration configuration-management shutdown docker docker-compose

11
推荐指数
1
解决办法
6481
查看次数

强制 Ansible 注销以刷新用户组

我正在使用 Ansible 和 Docker 设置服务器。我目前正在学习这两种技术,所以如果我在这里过于愚蠢,请容忍我。

为了运行运行 Docker 命令,用户必须在 docker 用户组中。所以我这样做:

-   name: Ensure group "docker" exists
    become: yes
    group:
        name: docker
    state: present

-   name: Add ansible user to docker group
    become: yes
    user:
        name: "{{ansible_user}}"
        groups: docker
        append: yes
Run Code Online (Sandbox Code Playgroud)

在后来的剧本(但相同的剧本)中,我将执行以下操作:

-   name: build
    command: docker-compose build --pull
    args:
        chdir: /docker

-   name: start services
    command: docker-compose -f docker-compose.yml up -d
    args:
        chdir: /docker
Run Code Online (Sandbox Code Playgroud)

这在第一次运行时永远不起作用。“构建”任务总是失败,抱怨它找不到 docker(这是由于缺少访问权限)。如果我手动登录,因为{{ansible_user}}我可以很好地运行 docker,并且如果我等待足够长的时间(以便 Ansible 将打开一个新的 SSH 会话,我认为)剧本也可以正常工作,这让我相信{{ansible_user}}没有由于 Ansible 将 SSH 会话重新用于剧本中的所有任务,因此选择了新组。

所以我该怎么做?我也试过 …

permissions ansible docker docker-compose ansible-playbook

10
推荐指数
1
解决办法
5854
查看次数