我目前在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)
任何帮助表示赞赏.
我有一个用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 / test和http:// srvc / test 都不起作用。
容器中的角度应用程序已启动并正在运行,我能够从http:// localhost:4200访问它
我在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) 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
我有一个运行在端口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文件中丢失了什么吗?
我想在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.请帮忙解决这个问题.
我有以下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) 我在docker中看到的一个相当常见的设置是让容器旋转执行任务然后退出.这是我经常使用docker-compose执行的操作,其中我有一个执行构建过程的节点容器,并且一旦构建了静态文件就不需要保持原状.在这些情况下,如果我查看docker-compose ps输出,而我的其他容器已启动并在端口上公开,则节点容器状态将为"Exit 0".虽然如果我需要访问这个容器,否则它是休眠的,它可以被旋转.
将此设置转换为Kubernetes有什么好的做法?
我最初的方法是将所有内容放在一个pod中,但是容器退出会导致CrashLoopBackOff,并且由于pod重启策略,pod会一直重新启动.如果我要保留这个设置,我只希望在其他容器之一失败时重启pod.它已将构建静态文件移动到其他容器可访问的卷中.
该容器是否应该移动到另一个不重启的容器中?看起来这样会不必要地使部署复杂化.
我只是开始使用docker,此刻,我在生产环境中对docker有一些疑问。
首先,我应该在产品服务器上使用哪些权限?我应该创建非root用户并在该用户下运行docker吗?还是没关系。
那么防火墙,我应该为Docker打开端口吗?
对我来说最大的问题-我应该在哪里存储应用程序的源代码?在撰写撰写文档时,我应该将所有源代码都移入图像,避免在所有https://docs.docker.com/compose/production/上使用卷绑定。但是在这种情况下,使用git进行更新的过程将如何?这是否意味着我每次都会更新所有图像?
如何使用compose将所有源移动到图像中?
在哪里将DB数据存储在容器中,或者我应该使用卷将其绑定?
容器中的权限如何?我应该在容器内创建一个非root用户吗?在docker之前,这是首选方法,是最佳实践,但是对于docker,我看不到任何原因。
我正在尝试使用身份验证运行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) docker ×10
docker-compose ×10
angular ×1
containers ×1
devops ×1
docker-swarm ×1
dockerfile ×1
go ×1
kubernetes ×1
linux ×1
mongodb ×1
mysql ×1
nestjs ×1
node.js ×1
process ×1
wait ×1