testcontainers / testcontainers/testcontainers-python
Testcontainers work as expected, fail to map Docker port when run with pytest in VS Code
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 2.3k
- Fork
- 386
- Merge trung bình
- 4 giờ 40 phút
- Pull request đã merge (30 ngày)
- 1
Mô tả
Describe the bug
I copied this code from the python-kafka tests in this repo.
I am able to run it successfully as a script. However, when I run in pytest, the docker container doesn't even start because it can't map to a port.
This behavior only happens when I run pytest.
The error code is as follows:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <testcontainers.core.docker_client.DockerClient object at 0x0000016333B4DE90>
container_id = '0100dda1fb4811efbdf5743faf5208c2113f7952824e04799df9c3b497bd9864'
port = 9093
def port(self, container_id, port):
port_mappings = self.client.api.port(container_id, port)
if not port_mappings:
> raise RuntimeError(f'port mapping for container {container_id} and port {port} is not '
'available')
E RuntimeError: port mapping for container 0100dda1fb4811efbdf5743faf5208c2113f7952824e04799df9c3b497bd9864 and port 9093 is not available
I believe this is a windows issue as I had to add os.environ['TC_HOST'] = 'localhost' because Windows has issues connecting to the localnpipe named pipe.
To Reproduce
from kafka import KafkaConsumer, KafkaProducer, TopicPartition
from testcontainers.kafka import KafkaContainer
import os
def test_kafka_confluent_7_1_3():
kafka_container = KafkaContainer("confluentinc/cp-kafka:7.1.3")
# set the advertised listeners to be the container's IP address
with kafka_container as container:
container.get_bootstrap_server()
produce_and_consume_kafka_message(container)
def produce_and_consume_kafka_message(container):
topic = 'test-topic'
bootstrap_server = container.get_bootstrap_server()
producer = KafkaProducer(bootstrap_servers=[bootstrap_server])
producer.send(topic, b"verification message")
producer.flush()
producer.close()
consumer = KafkaConsumer(bootstrap_servers=[bootstrap_server])
tp = TopicPartition(topic, 0)
consumer.assign([tp])
consumer.seek_to_beginning()
assert consumer.end_offsets([tp])[tp] == 1, \
"Expected exactly one test message to be present on test topic !"
if __name__ == '__main__':
test_kafka_confluent_7_1_3()
Runtime environment
Windows 10
Testcontainers 3.6.0
kafka-python 2.0.2
I am running the snippet above in pipenv, so it is not Docker in Docker.
Will update if I find a solution.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Chạy đoạn mã KafkaContainer được cung cấp bằng pytest trên Windows 10 với Testcontainers 3.6.0, sau đó kiểm tra điểm vào DockerClient.port được hiển thị trong traceback và thiết lập TC_HOST. Hoàn tất khi container khởi động với cổng được ánh xạ và các assertion của Kafka producer/consumer đều đạt khi chạy bằng pytest, giống như khi chạy dưới dạng script.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- docker, kafka, python, vscode
- Lĩnh vực
- devops, networking, testing-qa
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 28/100