- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个docker镜像:生产者和RabbitMQ队列。我的目标是让生产者(Python)将条目吐入队列。然后,我想调用docker-compose up
并观看生产者将内容添加到队列中。
现在,我不是盒子里最亮的蜡笔,如果有人能为我指出为什么事情没有按我的预期去做,我将不胜感激。我的生产者是./producer
目录中的两个简单文件。该目录的dockerfile如下所示:
FROM ubuntu:latest
ENV DEBIAN_FRONTEND=noninteractive
# Prepare to install 3.7 + GDAL libraries
RUN apt-get update --fix-missing
RUN apt-get install -y software-properties-common apt-utils
RUN add-apt-repository ppa:ubuntugis/ppa
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get update --fix-missing
# Install the packages for GDAL
RUN apt-get install libgdal-dev gdal-bin -y
# Install the packages for python
RUN apt-get install python3.7 python3-pip python3.7-dev -y
RUN python3.7 -m pip install pika
COPY ./example.py example.py
CMD [ "/bin/bash", "-c \"python3.7 example.py\"" ]
ENTRYPOINT
,
CMD
,各个版本的
/bin/bash
,
python3
,
python3.7
。运行
docker build -t blah && docker run --rm blah
会产生我期望的行为(无法连接到队列,因为它没有运行异常)。
./producer
的目录中,我有一个
docker-compose.yml
文件,如下所示:
version: "3.3"
services:
# RabbitMQ that connects the backend to the frontend
queue:
image: rabbitmq:3-management
expose:
# The standard AMQP protocol port
- 5672
ports:
# HTTP management UI
- '15672:15672'
environment:
RABBITMQ_DEFAULT_USER: "guest"
RABBITMQ_DEFAULT_PASS: "guest"
networks:
rakan:
ipv4_address: 172.16.238.10
deploy:
replicas: 1
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
healthcheck:
test: [ "CMD", "nc", "-z", "localhost", "5672" ]
interval: 5s
timeout: 15s
retries: 1
producer:
depends_on:
- queue
build:
context: ./producer
dockerfile: dockerfile
# entrypoint: "/bin/bash -c \"python example.py\""
expose:
- "5672"
networks:
rakan:
ipv4_address: 172.16.238.11
links:
- "queue"
networks:
- rakan
networks:
rakan:
ipam:
driver: default
config:
- subnet: "172.16.238.0/24"
docker-compose up
不再执行
./producer/dockerfile
中的命令。它将启动队列,但是它将选择忽略我想要的命令,说:
Attaching to toyexample_queue_1, toyexample_producer_1
toyexample_producer_1 exited with code 0
... All the logs of the RabbitMQ ...
docker run
时,它的行为方式不一样? 任何帮助将不胜感激。
entrypoint
添加到docker-compose.yml
中,形式为python3.7 example.py
,bin/bash python3.7 example.py
,bash python example.py
。所有命令都将以错误代码127
终止,声称python
或python3.7
是无法识别的命令。 cmd
添加到docker-compose.yml
中,其结果与最后一个项目符号点CMD
中的ENTRYPOINT
替换./producer/dockerfile
python
和python3.7
中使用不同的docker-compose.yml
和dockerfile
变体。 docker-compose down
,docker network/container/image prune
是我在这段史诗般的旅程中尝试过的所有命令example.py
中的代码是这样的:import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('172.16.238.10'))
channel = connection.channel()
for i in range(100):
# make a lot of noise
channel.queue_declare(queue=f'hello_{i}')
channel.basic_publish(exchange='',
routing_key='hello_{i}',
body='Hello World!')
print(f" [x] Sent 'Hello World!' to {i}")
connection.close()
最佳答案
首先,请注意以下几点:
Dockerfile中的
EXPOSE
和expose
中的docker-compose.yml
在大多数情况下都是不必要的,除了作为一种文档形式。 Dockerfile
命名为“Dockerfile”,而不是覆盖docker-compose.yml
中的名称即可。减少无关的配置数量使事情更容易阅读(对于其他人和您以后的人)。 links
关键字。 docker提供的DNS更加灵活。 depends_on
几乎完全没有用。它对应用程序一无所知,因此尽管它将确保一个容器在另一个容器之后启动,但它不知道您所依赖的服务是否实际上已启动并正在运行。在大多数情况下,您希望摆脱depends_on
并仅在应用程序中实现重新连接逻辑。 producer
容器开始所花的时间长得多。
docker-compose.yml
重写为如下所示:
version: "3.3"
services:
# RabbitMQ that connects the backend to the frontend
queue:
image: rabbitmq:3-management
environment:
RABBITMQ_DEFAULT_USER: "guest"
RABBITMQ_DEFAULT_PASS: "guest"
producer:
build:
context: ./producer
example.py
看起来像这样:
import pika
import time
while True:
try:
connection = pika.BlockingConnection(pika.ConnectionParameters('queue'))
except pika.exceptions.AMQPConnectionError as err:
print('rabbitmq connection failed; retrying in 1 second...')
time.sleep(1)
else:
break
channel = connection.channel()
for i in range(100):
# make a lot of noise
channel.queue_declare(queue=f'hello_{i}')
channel.basic_publish(exchange='',
routing_key='hello_{i}',
body='Hello World!')
print(f" [x] Sent 'Hello World!' to {i}")
connection.close()
[lars@madhatter npengra317] (master *)$ docker-compose up
Starting npengra317_queue_1 ... done
Starting npengra317_producer_1 ... done
Attaching to npengra317_queue_1, npengra317_producer_1
queue_1 | 2020-05-09 03:38:25.676 [info] <0.9.0> Feature flags: list of feature flags found:
.
.
.
queue_1 | 2020-05-09 03:38:26.599 [info] <0.9.0> Server startup complete; 3 plugins started.
queue_1 | * rabbitmq_management
queue_1 | * rabbitmq_web_dispatch
queue_1 | * rabbitmq_management_agent
queue_1 | completed with 3 plugins.
queue_1 | 2020-05-09 03:38:26.868 [info] <0.653.0> accepting AMQP connection <0.653.0> (172.25.0.3:34874 -> 172.25.0.2:5672)
producer_1 | rabbitmq connection failed; retrying in 1 second...
producer_1 | rabbitmq connection failed; retrying in 1 second...
producer_1 | rabbitmq connection failed; retrying in 1 second...
producer_1 | rabbitmq connection failed; retrying in 1 second...
producer_1 | rabbitmq connection failed; retrying in 1 second...
producer_1 | rabbitmq connection failed; retrying in 1 second...
producer_1 | rabbitmq connection failed; retrying in 1 second...
producer_1 | rabbitmq connection failed; retrying in 1 second...
producer_1 | [x] Sent 'Hello World!' to 0
producer_1 | [x] Sent 'Hello World!' to 1
.
.
.
producer_1 | [x] Sent 'Hello World!' to 97
producer_1 | [x] Sent 'Hello World!' to 98
producer_1 | [x] Sent 'Hello World!' to 99
npengra317_producer_1 exited with code 0
关于docker - 为什么这个docker-compose yml文件不执行该dockerfile中详细说明的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61691238/
我已经成功创建了我的第一个 django 项目。 我的项目 foo 和 foobar 中有两个应用程序。 我在每个应用程序文件夹中创建了一个名为“fixtures”的文件夹。我没有在我的setting
我遵循了 cap + nginx + unicorn 上的文档,但在理解如何正确进行数据库部署时遇到了一些问题。 /config/database.yml 不应该在 git repo 中(最好) 在/
GitLab server can't start .原因很可能是 gitlab.yml 配置文件不正确。 用什么工具检查yml语法是否正确? 我试过 Notepad++ 和 SublimeText,
我们有一个站点范围的 config.yml 文件,它联系 api key 等... 我的另一个 YML 文件能否访问 config.yml 中的值? 配置文件: development: th
我正在尝试在我的第一个测试应用程序中设置用户和安全管理,但我已经有点迷失了,不知道什么是做什么的。 到目前为止我的设置:Symfony 2.5、SonataUserBundle(以及 FOSUserB
我需要在 application.yml 中使用 yaml anchor 引用和字符串连接对于 Spring Boot 应用程序。动机是重用现有配置而不是复制它们。例如,我们有以下 applicati
我需要将单个 YML 文件拆分为多个 YML 文件: 微服务.yml: #------------------------------------------------------------- #
在我的 Symfony2 config.yml 文件中,我想导入一些我希望收集在单独的 yml 文件中的配置。 我用过: imports: - { resource: parameters.yml }
我是新的 docker 用户。在不同的手册中,我通常发现 docker-compose.yml 文件用于描述 docker 作业,但在 docker 站点上为此目标使用了 docker-stack.y
我不明白这两种在 Symfony2 中设置全局常量的方法之间的区别。是否只能在 config.yml (+configuration.php) 中设置默认值和类型? 最佳答案 参数.yml 文件是所有
在 config.yml 中,我看到了 monolog、web_profiler 等根元素。那些服务可以在 service.yml 中配置吗?换句话说,我在 service.yml 中定义的服务是否可
我阅读了这个文档:https://serverless.com/framework/docs/providers/google/guide/services/ users/ serverless.
我正在从事 CI/CD 项目(使用 circleci 管道),目前,我坚持让我的“create_infrastructure”工作正常工作。下面是作业 # AWS infrastructure
编辑:原始标题“文本环境:”平台“sqlite”不支持函数“year”” 将 beberlei\DoctrineExtensions 合并到测试环境中会产生 Uncaught PHP Exceptio
abc.yml: d_lab: 192.168.1.1 d_location: /ephemeral ema: apple: 10.0.0.1 orange: 10.0.0.2
我的 springboot 应用程序有一些 yml 文件(每个文件用于各种配置文件 - dev、prod)来加载配置。我正在将配置移至数据库。 示例配置如下: admin: id: user05
我有一个大型剧本,它使用多个角色来设置新服务器。我想重新使用剧本,但为了退役阶段而不是调用 role_name/tasks/main.yml 并有很多 when: 语句,我想要告诉 Ansible 调
使用 bookdown 创作文档时,我知道有四个选项可以放置配置选项: _bookdown.yml _output.yml 第一个 .Rmd 的 yaml header 文档 传递给 bookdown
我们希望将我们的 azure pipeline build .ymls 模块化。对于完整的应用程序构建,将包括不同组件的构建 .yml 到主 .yml 中,将它们全部构建在一起。对于单独的组件,我们将
假设我的网站上有一个简单的传统联系表单,我希望它在发送电子邮件时在开发环境中使用主题“Test: (subject_field value)”,在生产环境中使用“(subject_field_valu
我是一名优秀的程序员,十分优秀!