我尝试部署 docker 堆栈,其中包括我的开发环境。但在随机情况下,我有下一个错误:
> failed to create service < service_name >: Cannot connect to the
> Docker daemon at unix:///var/run/docker.sock. Is the docker daemon
> running?
Run Code Online (Sandbox Code Playgroud)
接下来我重新启动 docker 守护进程。有时它需要杀死 docker 进程和垫片。我删除旧堆栈并重新构建。有时 docker 成功完成构建,但套接字在开始阶段崩溃。
当我以常规模式启动它时,所有容器都可以正常工作,没有群或堆栈。它在 swarm 中并不完全有效。
我已经使用下一个命令来构建:
> $ docker stack deploy dev-env-stc -c docker-compose.yml
Run Code Online (Sandbox Code Playgroud)
环境在 Antergos Linux(Arch) 中运行。
使用命令创建的 Nginx 容器和 docker 网络:
>$ docker run --detach --name nginx-main --net dev-env-ext --ip 10.20.20.10 --publish 80:80 --publish 443:443 --volume /env-vol/nginx/conf:/etc/nginx:ro --volume /env-vol/nginx/www:/usr/var/www --volume /env-vol/nginx/logs:/usr/var/logs --volume /env-vol/nginx/run:/usr/var/run --volume /env-vol/ssl:/usr/var/ssl:ro nginx-webserver …Run Code Online (Sandbox Code Playgroud) 这是我的 Docker compose/stack 文件。当我在单个节点上部署时,一切正常,但当我在多个节点上部署时,出现以下错误:
绑定类型的挂载配置无效 绑定源路径不存在
version: '3'
services:
shinyproxy:
build: /etc/shinyproxy
deploy:
replicas: 3
user: root:root
hostname: shinyproxy
image: shinyproxy-example
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 5000:5000
networks:
- proxynetwork
mysql:
image: mysql
deploy:
replicas: 3
volumes:
- /mysqldata:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: keycloak
MYSQL_USER: keycloak
MYSQL_PASSWORD: password
networks:
- proxynetwork
keycloak:
deploy:
replicas: 3
image: jboss/keycloak
volumes:
- /etc/letsencrypt/live/ds-gym.de/fullchain.pem:/etc/x509/https/tls.crt
- /etc/letsencrypt/live/ds-gym.de/privkey.pem:/etc/x509/https/tls.key
#- /theme/govuk-social-providers/:/opt/jboss/keycloak/themes/govuk-social-providers/
environment:
- PROXY_ADDRESS_FORWARDING=true
- KEYCLOAK_USER=myadmin
- KEYCLOAK_PASSWORD=mypassword
ports:
- 8443:8443
networks:
- proxynetwork
networks: …Run Code Online (Sandbox Code Playgroud) 我有一个 docker swarm,目前只有一个节点和几个堆栈。为了能够获取请求我的一项服务的客户端的 IP 地址,我将一项服务上的端口切换为模式:主机。除非我想更新该服务,否则这工作正常。我没有更改部署顺序,因此它应该是默认的“停止优先”,但是当我使用任务时stack deploy,任务失败并显示以下消息:
no suitable node (host-mode port already in use on 1 node)
Run Code Online (Sandbox Code Playgroud)
当我将服务缩小到 0 然后使用stack deploy它时,它可以正常工作,但我不明白为什么直接更新时会出现问题。“stop-first”不应该意味着先终止旧服务(释放端口),然后启动新服务吗?如何在部署更改之前更改 yml 而不必缩放到 0?
这是有问题的 application.yml:
version: "3.7"
services:
myservice:
image: myrepo/gateway
ports:
- mode: host
protocol: tc
published: 443
target: 443
networks:
- gateway_net
networks:
gateway_net:
external: true # was created with 'docker network create -d overlay gateway_net', is used to connect gw with other services
Run Code Online (Sandbox Code Playgroud) docker docker-compose docker-swarm docker-network docker-stack
我曾经将映像版本外部化为.env文件。这使维护变得容易,而且我docker-compose.yml不仅仅为了升级版本就修改文件,所以我确定我不会误删一行。
但是当我尝试将我的服务部署stack到时swarm,docker引擎抱怨我的映像不是正确的存储库/标签,并带有以下确切消息:
来自守护程序的错误响应:rpc错误:代码= 3 desc = ContainerSpec:“组/图像:”不是有效的存储库/标签
要解决此问题,我可以直接在docker-compose.yml文件中修复映像版本。这里有逻辑还是一个错误?但这混合了docker-compose和变量部分的修复部分。
干杯,奥利维尔
我有一个 docker 堆栈配置,其中包含一个名为 的覆盖网络traefik。它包含我的traefik反向代理容器,然后是几个服务于各个子域的容器。我正在添加一个新容器,它需要访问我在另一个容器中创建的数据库服务器,因此我添加了如下内容:
networks:
traefik:
driver: overlay
database:
driver: overlay
services:
traefik:
image: traefik
networks:
- traefik
ports:
- 80:80
- 443:443
- 8080:8080
volumes:
# ...
# ...
database:
image: postgres:9.6-alpine # match what's being used by heroku
networks:
- database
staging:
image: staging
networks:
- traefik
- database
deploy:
labels:
traefik.enable: "true"
traefik.frontend.rule: Host:lotto-ticket.example.com
traefik.docker.network: traefik
traefik.port: 3000
Run Code Online (Sandbox Code Playgroud)
当我执行此操作时,反向代理开始返回网关超时代码,表明staging容器不再可用于网络traefik。database如果我从容器中删除网络staging,子域将按预期运行(尽管它显然无法访问数据库),并且当我将其重新添加时,反向代理开始从中超时。
两个网络之间是否存在某种冲突?我是否需要配置 IP 路由才能在单个容器上使用多个 docker 网络?
编辑:在配置摘录中添加更多详细信息
Jenkins构建部分中的Bash脚本
#!/bin/sh
docker build -t smstake:latest .
#Push to the private repository applying the proper tags for the image
docker tag smstake:latest reg01.dev.01cloud.com:5000/smstake:1.0.1
docker push reg01.dev.01cloud.com:5000/smstake:1.0.1
docker stack rm smstake
docker stack deploy -c docker-compose.yml smstake
Run Code Online (Sandbox Code Playgroud)
问题是它在第一次构建时失败了,并且发布了一些网络问题.如果再次构建,它将在另一个构建上成功运行.我该如何解决这个问题.
我得到的错误:
Removing service smstake_app
Removing service smstake_db
Removing service smstake_phpmyadmin
Removing network smstake_smstake
Creating service smstake_app
failed to create service smstake_app: Error response from daemon: network smstake_smstake not found
Build step 'Execute shell' marked build as failure
Finished: FAILURE
Run Code Online (Sandbox Code Playgroud)
正如我们可以看到它删除服务并在服务创建过程中抛出网络未发现问题. …
docker docker-compose docker-swarm docker-swarm-mode docker-stack
我正在尝试使用不同 docker 堆栈的简单服务发现方案。
假设我有 2 个堆栈。为简单起见,我将它们命名为 stackA 和 stackB。StackA 有一个名为“serviceA”的服务,StackB 有一个名为“serviceB”的服务。ServiceA 和 serviceB 有一个简单的 RestApplication。
现在我想从 serviceA 调用 serviceB。了解docker服务发现的概念,按照docker官方文档进行操作,但是无法调用serviceB。 在另一个堆栈上发现服务或容器
根据官方文档,我正在使用serviceB.StackB,但不能这样做。
无法理解原因。几点: 1.
每个堆栈创建自己的网络。是否因为两个堆栈不在同一网络中而发生?
2. 如果我只在不同的网络需要它们,我如何调用不同的服务
给定撰写文件
version: '3.8'
services:
whoami1:
image: containous/whoami
depends_on:
- whoami2
whoami2:
image: containous/whoami
Run Code Online (Sandbox Code Playgroud)
当部署到 docker swarmdocker stack deploy -c docker-compose.yaml test
服务时whoami1,whoami2似乎以随机顺序启动并忽略depends_on条件。
docker stack deploy -c docker-compose.yaml test
Creating network test_default
Creating service test_whoami1
Creating service test_whoami2
Run Code Online (Sandbox Code Playgroud)
docker swarm 是否支持通过依赖项进行服务启动排序?
我有一个堆栈文件,我试图在其中告诉它使用我提供的两个主机名中的一个。这可能吗?该服务并非以这些变量启动,但是,当删除至少其中一个变量时,它就可以工作。感谢您的帮助!
堆栈文件:
deploy:
placement:
constraints:
- node.hostname == myhost1
- node.hostname == myhost2
Run Code Online (Sandbox Code Playgroud) 假设我们有以下堆栈文件:
version: "3"
services:
ubuntu:
image: ubuntu
deploy:
replicas: 2
restart_policy:
condition: on-failure
resources:
limits:
cpus: "0.1"
memory: 50M
entrypoint:
- tail
- -f
- /dev/null
logging:
driver: "json-file"
ports:
- "80:80"
networks:
- webnet
web:
image: httpd
ports:
- "8080:8080"
hostname: "apache"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
resources:
limits:
memory: 32M
reservations:
memory: 16M
depends_on:
- "ubuntu"
networks:
- webnet
networks:
webnet:
Run Code Online (Sandbox Code Playgroud)
当我运行时docker service inspect mystack_web,生成的输出不会显示对depends_on条目的任何引用。
这样可以吗?以及如何打印给定docker服务的依赖关系?
我正在尝试对docker -compose和swarm使用相同的 docker-compose.yml和.env文件。变量来自通过在启动时运行 run.sh 脚本,.env文件中应该通过 sed 解析到配置文件中。使用该docker-compose up命令时,此设置工作正常,但当我使用该docker stack deploy命令时,它们没有通过。
如何将变量传递到容器中,以便run.sh脚本在启动时解析它们?
environment-variables docker docker-compose docker-swarm docker-stack