标签: docker-compose

当我们向pid 1发送停止时,docker如何对待子进程

我目前在Dockerfile中使用ENTRYPOINT ["/sbs/start.sh"].因此,当容器启动时,start.sh作为pid 1运行,而我的start.sh脚本将另外两个子进程跨越到pid1.我的问题是当我向pid1发送docker stop命令时,docker如何处理子进程?孩子的过程会被优雅地停止吗?还是会被强行杀死?

在我们有子进程的情况下,有一个简单的进程管理器和init系统(https://github.com/Yelp/dumb-init或supervisor)来解决这些问题会更好吗?如果是这样,请建议一个轻量级的init系统?或者可以pid1(在我的情况下start.sh)处理这些问题?

输出ps -ef:

root         1     0  0 19:23 ?        00:00:00 /bin/bash /sbs/start.sh

root        13     1  0 19:23 ?        00:00:00 /sbs/bin/envconsul... 

root        20    13  1 19:23 ?        00:00:21 /usr/lib/...
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.

linux process docker docker-compose

0
推荐指数
1
解决办法
1543
查看次数

从angular2应用程序调用在Docker容器中运行的服务

我有一个用Angular2开发的UI应用程序。我也有一些在Spring Boot中开发的服务。我正在尝试从Angular应用程序调用Spring Boot服务。

以下是我的docker-compose.yml

version: '2'
networks:
  mynet:
services:
  ui:
    image: uiimg
    networks:
      - mynet
    ports:
      - "4200:4200"
  srvc:
    image: scservice
    networks:
      - mynet
    ports:
      - "8080:8080"
  testsrvc:
    image: testsrvc
    networks:
      - mynet
    ports:
      - "8081:8081"      
Run Code Online (Sandbox Code Playgroud)

这就是我从angular调用“ srvc”定义的服务的方式。

return this.http.get("http://srvc:8080/test").map(result => result.json());
Run Code Online (Sandbox Code Playgroud)

但是我收到错误srvc:8080 / test无法加载资源:net :: ERR_NAME_NOT_RESOLVED

但是,我可以从“ testsrvc”中的另一个服务调用http:// srvc:8080 / test,而不会出现任何问题。

我的理解是,由于UI请求源自浏览器,因此它无法知道“ srvc”是什么,而由于“ testsrvc”也运行在容器中,因此可以链接到“ srvc”

因此,我应该如何从角度调用“ srvc”?

PS:我尝试了http:// srvc:8080 / testhttp:// srvc / test 都不起作用。

容器中的角度应用程序已启动并正在运行,我能够从http:// localhost:4200访问它

docker docker-compose angular2-services angular

0
推荐指数
1
解决办法
1413
查看次数

在docker-compose中混合GITLAB_OMNIBUS_CONFIG和普通Env val

我在docker-compose中有以下内容。如何将GITLAB_OMNIBUS_CONFIG和大写字母env变量混合使用。

version: '2.2'

services:
  redis:
    restart: always
    image: sameersbn/redis:latest
    command:
    - --loglevel warning
    volumes:
    - /srv/docker/gitlab/redis:/var/lib/redis:Z

  postgresql:
    restart: always
    image: sameersbn/postgresql:latest
    volumes:
    - /srv/docker/gitlab/postgresql:/var/lib/postgresql:Z
    environment:
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production
    - DB_EXTENSION=pg_trgm

  gitlab:
    restart: always
    image: sameersbn/gitlab:10.3.3
    hostname: 'gitlab.example.com'
    depends_on:
    - redis
    - postgresql
    ports:
    - "30080:30080"
    - "30022:22"
    volumes:
    - /srv/docker/gitlab/gitlab:/home/git/data:Z
    environment:
        GITLAB_OMNIBUS_CONFIG: |
              external_url 'http://gitlab.example.com:30080'
              gitlab_rails['gitlab_shell_ssh_port'] = 30022
    - DEBUG=true
    - DB_ADAPTER=postgresql
    - DB_HOST=postgresql
    - DB_PORT=5432
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production

    - REDIS_HOST=redis
    - REDIS_PORT=6379

    - …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose

0
推荐指数
1
解决办法
2564
查看次数

在docker容器中运行时,nodejs app不会连接到localhost

My environment:
Ubunut 17.04 LTS
npm --version: 5.6.0
nodejs --version: 4.7.2
angular cli version: 1.6.4
Run Code Online (Sandbox Code Playgroud)

docker-compose文件:

version: '3'

services:
 my-app:
    build:
      context: .
      dockerfile: Dockerfile
    restart: unless-stopped
    volumes:
      - .:/usr/src/app
    ports:
      - "4200:4200"
Run Code Online (Sandbox Code Playgroud)

我在dockerfile中注释掉了EXPOSE 4200,因为我已经从docker-compose.yml文件中安装了它,是不是没问题,我应该在dockerfile中公开并在docker-compose中挂载?

在命令行上运行npm start会在浏览器上成功启动应用程序,因为我可以去localhost:4200看看应用程序是否正在运行.

但是,如果我使用docker构建我的应用程序并运行docker-compose,我看到nodejs服务器仍在运行localhost:4200,但是,我无法访问该应用程序,因此localhost:4200无法启动该页面.

运行APP手动工作很棒,我可以在浏览器上看到它:

ubuntu17@ubuntu17:~/playground/apps/myapp-ui$ ng serve
** NG Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
Date: 2018-01-16T16:22:51.912Z                                                          
Hash: 40ac2bd0588ee2136d15
Time: 13963ms
chunk {inline} inline.bundle.js (inline) 5.79 kB [entry] [rendered]
chunk {main} main.bundle.js …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile docker-compose docker-swarm docker-machine

0
推荐指数
1
解决办法
2473
查看次数

使用MySQL docker容器网络设置的Node.js

我有一个运行在端口3000上的Node.js应用程序(使用新的NestJS)框架。作为数据库,我通过TypeORM使用MySQL。在本地,一切正常。我在将其码头化时遇到问题。

我的TypeORM配置:

{
    "type": "mysql",
    "host": "localhost",
    "port": 3306,
    "username": "root",
    "password": "root",
    "database": "nest",
    "entities": ["src/**/*.entity{.ts,.js}"],
    "synchronize": true
}
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml的如下:

version: "3"
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: nest
      MYSQL_USER: root
      MYSQL_PASSWORD: root
    networks:
      - new
  nest:
    image: grimscythe/nest-sample
    depends_on:
      - db
    ports:
      - 3000:3000
    networks:
      - new
networks:
  new:
Run Code Online (Sandbox Code Playgroud)

我一直在阅读有关此特定方案的文档,所有文档都应该可以正常工作。扑向MySQL容器表明数据库正在正常运行。但是,Node框架随处可见Unable to connect to the database...。我在docker-compose.yml文件中丢失了什么吗?

mysql node.js docker docker-compose nestjs

0
推荐指数
1
解决办法
740
查看次数

在docker容器中安装golang外部包

我想在golang中获取一个外部库但是当我在命令下面触发时:

FROM golang:1.8-alpine
RUN go get gopkg.in/natefinch/lumberjack.v2
EXPOSE 8080
Run Code Online (Sandbox Code Playgroud)

它给出了以下错误:

go: missing Git command. See https://golang.org/s/gogetcmd
package github.com/gin-gonic/gin: exec: "git": executable file not found in $PATH
Run Code Online (Sandbox Code Playgroud)

我正在使用golang:1.8-alpine.请帮忙解决这个问题.

go docker docker-compose

0
推荐指数
1
解决办法
2032
查看次数

Docker-Compose:如何等待其他服务准备就绪?

我有以下docker-compose,在启动myprogram-app之前,我需要等待服务jhipster-registry启动并接受连接。

我按照官方文档https://docs.docker.com/compose/compose-file/compose-file-v2/尝试了healtcheck方法

version: '2.1'
services:
    myprogram-app:
        image: myprogram
        mem_limit: 1024m
        environment:
            - SPRING_PROFILES_ACTIVE=prod,swagger
            - EUREKA_CLIENT_SERVICE_URL_DEFAULTZONE=http://admin:$${jhipster.registry.password}@jhipster-registry:8761/eureka
            - SPRING_CLOUD_CONFIG_URI=http://admin:$${jhipster.registry.password}@jhipster-registry:8761/config
            - SPRING_DATASOURCE_URL=jdbc:postgresql://myprogram-postgresql:5432/myprogram
            - JHIPSTER_SLEEP=0
            - SPRING_DATA_ELASTICSEARCH_CLUSTER_NODES=myprogram-elasticsearch:9300
            - JHIPSTER_REGISTRY_PASSWORD=53bqDrurQAthqrXG
            - EMAIL_USERNAME
            - EMAIL_PASSWORD
        ports:
            - 8080:8080
        networks:
          - backend
        depends_on:
          - jhipster-registry:
              "condition": service_started
          - myprogram-postgresql
          - myprogram-elasticsearch
    myprogram-postgresql:
        image: postgres:9.6.5
        mem_limit: 256m
        environment:
            - POSTGRES_USER=myprogram
            - POSTGRES_PASSWORD=myprogram
        networks:
          - backend
    myprogram-elasticsearch:
        image: elasticsearch:2.4.6
        mem_limit: 512m
        networks:
          - backend
    jhipster-registry:
        extends:
            file: jhipster-registry.yml
            service: jhipster-registry
        mem_limit: …
Run Code Online (Sandbox Code Playgroud)

wait docker docker-compose

0
推荐指数
4
解决办法
3844
查看次数

Kubernetes允许容器在没有重新启动的情况下退出

我在docker中看到的一个相当常见的设置是让容器旋转执行任务然后退出.这是我经常使用docker-compose执行的操作,其中我有一个执行构建过程的节点容器,并且一旦构建了静态文件就不需要保持原状.在这些情况下,如果我查看docker-compose ps输出,而我的其他容器已启动并在端口上公开,则节点容器状态将为"Exit 0".虽然如果我需要访问这个容器,否则它是休眠的,它可以被旋转.

将此设置转换为Kubernetes有什么好的做法?

我最初的方法是将所有内容放在一个pod中,但是容器退出会导致CrashLoopBackOff,并且由于pod重启策略,pod会一直重新启动.如果我要保留这个设置,我只希望在其他容器之一失败时重启pod.它已将构建静态文件移动到其他容器可访问的卷中.

该容器是否应该移动到另一个不重启的容器中?看起来这样会不必要地使部署复杂化.

containers docker kubernetes docker-compose devops

0
推荐指数
1
解决办法
1104
查看次数

生产中的Docker,源数据,数据库数据,更新过程

我只是开始使用docker,此刻,我在生产环境中对docker有一些疑问。

  1. 首先,我应该在产品服务器上使用哪些权限?我应该创建非root用户并在该用户下运行docker吗?还是没关系。

  2. 那么防火墙,我应该为Docker打开端口吗?

  3. 对我来说最大的问题-我应该在哪里存储应用程序的源代码?在撰写撰写文档时,我应该将所有源代码都移入图像,避免在所有https://docs.docker.com/compose/production/上使用卷绑定。但是在这种情况下,使用git进行更新的过程将如何?这是否意味着我每次都会更新所有图像?

  4. 如何使用compose将所有源移动到图像中?

  5. 在哪里将DB数据存储在容器中,或者我应该使用卷将其绑定?

  6. 容器中的权限如何?我应该在容器内创建一个非root用户吗?在docker之前,这是首选方法,是最佳实践,但是对于docker,我看不到任何原因。

production-environment docker docker-compose

0
推荐指数
1
解决办法
605
查看次数

Docker内部的Mongo身份验证

我正在尝试使用身份验证运行mongo docker映像。遵循文档中最简单的示例,我通过docker-compose up命令运行了mongo和mongo-express图像。我docker-compose.yml现阶段:

version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example
Run Code Online (Sandbox Code Playgroud)

这样运行,两个容器都可以正常运行,我可以从mongo-express网站浏览mongo的内容。但是,每当我更改docker-compose.yml文件名或密码时,例如:

version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example123

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example123
Run Code Online (Sandbox Code Playgroud)

mongo-express抛出未经授权的错误消息:

mongo-express_1  | Admin Database connected
mongo-express_1  | { MongoError: Authentication failed.
mongo-express_1  |     at Function.MongoError.create …
Run Code Online (Sandbox Code Playgroud)

mongodb docker docker-compose

0
推荐指数
2
解决办法
1676
查看次数