假设我有一个我想要运行的Docker容器,那么我可以调用
$ docker run ...
Run Code Online (Sandbox Code Playgroud)
一切都很好.如果系统崩溃并重新启动,是否有一种内置的方式来运行容器,它将自动重启?
如果是这样,这还可以在Docker Compose中使用吗?
我正在尝试使用wurstmeister\kafka-docker图像 docker-compose,但我在连接所有内容方面遇到了实际问题.
我检查的所有帖子或问题,似乎没有任何问题,但我坦率地失去了.(并且在SO中至少有两个问题试图解决这个问题)
我认为问题在于我对网络的了解不足docker.所以问题是:
我可以从同一个kafka容器中使用和生产,但是,当我尝试创建另一个容器(或者使用我的笔记本电脑和python客户端)时,我得到了几个与advertised.host.name参数相关的错误(在图像中这个参数是KAFKA_ADVERTISED_HOST_NAME)
我已经尝试过多种方式设置这个变量,但它根本不起作用.
所以我正在寻找一个明确的答案(即如何自动设置这些参数及其含义)如何设置 docker-compose.yml
这是我的:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
# hostname: kafka
ports:
- "9092"
links:
- zookeeper:zk
environment:
KAFKA_ADVERTISED_HOST_NAME: "kafka"
KAFKA_ADVERTISED_PORT: "9092"
KAFKA_ZOOKEEPER_CONNECT: "zk:2181"
Run Code Online (Sandbox Code Playgroud)
UPDATE
按照@dnephin的建议,我修改start-kafka.sh了以下几行:
...
if [[ -z "$KAFKA_ADVERTISED_PORT" ]]; then
export KAFKA_ADVERTISED_PORT=$(hostname -i)
fi
...
Run Code Online (Sandbox Code Playgroud)
并KAFKA_ADVERTISED_HOST_NAME: "kafka"从中删除docker-compose.yml
我以规范的方式启动了容器:
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
两个容器都在运行:
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------
infraestructura_kafka_1 start-kafka.sh Up …Run Code Online (Sandbox Code Playgroud) 我在AWS EC2上运行了一些docker容器,/ var/lib/docker/overlay2文件夹的磁盘大小增长得非常快.
我想知道删除其内容是否安全?或者如果docker有某种命令来释放一些磁盘使用量.
谢谢!
更新:
我实际上docker system prune -a已经尝试了,它回收了0Kb.
我的/ docker/overlay2磁盘大小也远大于输出 docker system df
在阅读了docker文档和BMitch的回答之后,我认为触摸这个文件夹是一个愚蠢的想法,我会尝试其他方法来回收我的磁盘空间.
如何与孤儿图像时,你有2个独立的项目,并且希望他们能够在同一时间工作,或者至少建立运行docker-compose up -d,而不--remove-orphans标志时,图像已经建成的其他项目。
码头工人撰写文件1:
version: '2'
services:
applications:
image: tianon/true
volumes:
- ../../:/var/www/vhosts/project1
nginx:
build: ./images/nginx
image: project1/nginx:latest
ports:
- "80:80"
volumes_from:
- applications
networks:
appnet:
aliases:
- project1.app
- admin.project1.app
php:
image: project1/php:latest
ports:
- "7778:7778"
build:
context: ./images/php
dockerfile: Dockerfile
volumes_from:
- applications
networks:
- appnet
mysql:
image: project1/mysql:latest
build: ./images/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- mysqldata:/var/lib/mysql
networks:
- appnet
ports:
- "33066:3306"
workspace:
image: project1/workspace:latest
build:
context: ./images/workspace
volumes_from:
- applications
working_dir: /var/www/vhosts/project1 …Run Code Online (Sandbox Code Playgroud) init container这是 Kubernetes 中的一个很棒的功能,我想知道 docker-compose 是否支持它?它允许我在启动主应用程序之前运行一些命令。
我遇到了这个 PR https://github.com/docker/compose-cli/issues/1499,其中提到支持 init 容器。但我在他们的参考文献中找不到相关文档。
据我了解,docker compose是最新版本。这是我至少从 docker 官方文档安装的一个。
我正在开发一个docker-compose在他们的 makefile 中使用的项目。
我如何将所有呼叫(及其参数)从 转发 docker-compose到 docker compose?
我创建了一个别名:
alias docker-compose="docker compose"
它在终端中运行良好。但不在 make 文件中。
我正在尝试用来docker-compose编排几个容器.要进行故障排除,我经常最终通过执行以下操作从容器中运行bash:
$ docker-compose run --rm run web bash
Run Code Online (Sandbox Code Playgroud)
我总是尝试传递--rm开关,以便在退出bash会话时删除这些容器.有时虽然,他们仍然存在,我看到它们的输出docker-compose ps.
Name Command State Ports
----------------------------------------------------------------------------------
project_nginx_1 /usr/sbin/nginx Exit 0
project_nginx_run_1 bash Up 80/tcp
project_web_1 python manage.py runserver ... Exit 128
project_web_run_1 bash Up 8000/tcp
Run Code Online (Sandbox Code Playgroud)
此时,我试图手动停止并删除这些组件,但我无法做到这一点.我试过了:
$ docker-compose stop project_nginx_run_1
No such service: project_nginx_run_1
Run Code Online (Sandbox Code Playgroud)
我也尝试了其他命令rm,kill等等.
我该怎么做才能摆脱这些容器?
编辑:
修正了输出docker-compose ps.
我正在使用命令运行我的容器sudo docker run --privileged container_name。但现在我使用 YML 和命令docker-compose up来启动它,但我不知道如何--privileged在使用该命令启动容器时添加标志。我已经尝试添加privileged: true到 YML 但在这种情况下不起作用。
泊坞窗,compose.yml
version: '2'
services:
app:
build:
context: .
command: python src/app.py
restart: on-failure
depends_on:
- db
environment:
- TJBOT_DB_HOST=db
- TJBOT_API_KEY
- TJBOT_AUTO_QUESTION_TIME
env_file:
- .env
db:
image: mongo:3.0.14
volumes:
- mongodbdata:/data/db
volumes:
mongodbdata:
Run Code Online (Sandbox Code Playgroud)
如果我更改.env文件,我怎样才能重新加载容器以使用新环境变量并减少停机时间?
请注意,这是一个 Traefik V2 问题。我在 V1 上有一个解决方案,但 V2 是一个彻底的重整。
以上应该将http://whoami.mysite.com重定向到 http s ://whoami.mysite.com。
没有其他文件。一切都在这个 Docker-compose.yml 中,因为它是准备进一步部署的测试。
version: "3.3"
services:
traefik:
image: "traefik:v2.0"
container_name: "traefik"
command:
- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.web-secure.address=:443"
- "--certificatesresolvers.myhttpchallenge.acme.httpchallenge=true"
- "--certificatesresolvers.myhttpchallenge.acme.httpchallenge.entrypoint=web-secure"
#- "--certificatesresolvers.myhttpchallenge.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "--certificatesresolvers.myhttpchallenge.acme.email=me@mail.com"
- "--certificatesresolvers.myhttpchallenge.acme.storage=/letsencrypt/acme.json"
labels:
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
whoami:
image: "containous/whoami"
container_name: "whoami"
labels:
- "traefik.enable=true"
- …Run Code Online (Sandbox Code Playgroud) docker ×10
docker-compose ×10
apache-kafka ×1
containers ×1
kafka-python ×1
project ×1
traefik ×1