testcontainers / testcontainers/testcontainers-python
Testcontainers work as expected, fail to map Docker port when run with pytest in VS Code
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 2.3k
- Forks
- 386
- Merge medio
- 4 h 40 min
- PR fusionados (30 d)
- 1
Descripción
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.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Ejecuta el fragmento de KafkaContainer proporcionado bajo pytest en Windows 10 con Testcontainers 3.6.0 y, después, inspecciona el punto de entrada DockerClient.port mostrado en el traceback y la configuración TC_HOST. Se considera terminado cuando el contenedor se inicia con su puerto asignado y las aserciones del productor/consumidor de Kafka pasan bajo pytest, igual que al ejecutarlo como script.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- docker, kafka, python, vscode
- Área
- devops, networking, testing-qa
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 28/100