amazon web services - cli - ¿Cómo me conecto para alojar MySQL desde la instancia de docker local de AWS SAM?
sam local invoke (3)
No puedo decir por qué --docker-network host
produce este error, pero no creo que lo necesite. Puedo conectarme a MySQL que se ejecuta en mi máquina local desde SAM local, sin ninguna anulación de red.
Hago esto simplemente usando mi IP local (a diferencia de localhost
o 127.0.0.1) para conectarme a la base de datos.
La siguiente función lambda se conecta a mi MySQL local muy bien, siempre que use mi IP local, como reveló una herramienta como ipconfig
.
''use strict'';
var mysql = require(''mysql'');
var connection = mysql.createConnection({
host : ''192.168.1.6'',
user : ''mike'',
password : ''password'',
database : ''logtest''
});
module.exports.hello = (event, context, callback) => {
connection.connect();
connection.query(''SELECT 1 + 1 AS solution'', function (error, results, fields) {
if (error) throw error;
console.log(''The solution is: '', results[0].solution);
const response = {
statusCode: 200,
body: JSON.stringify({solution: results[0].solution})
};
connection.end();
callback(null, response);
});
};
Salida parcial de ipconfig
:
Ethernet adapter Local Area Connection 6:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::95c2:495c:7226:8ac2%39
IPv4 Address. . . . . . . . . . . : 10.251.19.6
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
Wireless LAN adapter Wireless Network Connection:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::496a:d34d:8380:3b1c%15
IPv4 Address. . . . . . . . . . . : 192.168.1.6
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1
En este caso, mi función lambda puede conectarse a MySQL local utilizando 10.251.19.6 o 192.168.1.6.
Estoy intentando invocar mi función Lambda utilizando sam local invoke
pero encuentro que no se puede conectar a mi host MySQL. Intenté agregar --docker-network host
pero tampoco puedo conectar
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/docker/api/client.py", line 229, in _raise_for_status
response.raise_for_status()
File "/usr/lib/python3.6/site-packages/requests/models.py", line 935, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http+docker://localhost/v1.35/networks/6ad3bd87e8437e8410145d169a4edf68d1b0247a67257ce7dd1208dac3664c82/connect
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/bin/sam", line 11, in <module>
load_entry_point(''aws-sam-cli==0.5.0'', ''console_scripts'', ''sam'')()
File "/usr/lib/python3.6/site-packages/click/core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/click/core.py", line 697, in main
rv = self.invoke(ctx)
File "/usr/lib/python3.6/site-packages/click/core.py", line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/lib/python3.6/site-packages/click/core.py", line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/lib/python3.6/site-packages/click/core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/lib/python3.6/site-packages/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/click/decorators.py", line 64, in new_func
return ctx.invoke(f, obj, *args[1:], **kwargs)
File "/usr/lib/python3.6/site-packages/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/samcli/commands/local/invoke/cli.py", line 47, in cli
docker_network, log_file, skip_pull_image, profile) # pragma: no cover
File "/usr/lib/python3.6/site-packages/samcli/commands/local/invoke/cli.py", line 79, in do_cli
stderr=context.stderr)
File "/usr/lib/python3.6/site-packages/samcli/commands/local/lib/local_lambda.py", line 80, in invoke
stdout=stdout, stderr=stderr)
File "/usr/lib/python3.6/site-packages/samcli/local/lambdafn/runtime.py", line 83, in invoke
self._container_manager.run(container)
File "/usr/lib/python3.6/site-packages/samcli/local/docker/manager.py", line 61, in run
container.create()
File "/usr/lib/python3.6/site-packages/samcli/local/docker/container.py", line 115, in create
network.connect(self.id)
File "/usr/lib/python3.6/site-packages/docker/models/networks.py", line 57, in connect
container, self.id, *args, **kwargs
File "/usr/lib/python3.6/site-packages/docker/utils/decorators.py", line 19, in wrapped
return f(self, resource_id, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/docker/api/network.py", line 248, in connect_container_to_network
self._raise_for_status(res)
File "/usr/lib/python3.6/site-packages/docker/api/client.py", line 231, in _raise_for_status
raise create_api_error_from_http_exception(e)
File "/usr/lib/python3.6/site-packages/docker/errors.py", line 31, in create_api_error_from_http_exception
raise cls(e, response=response, explanation=explanation)
docker.errors.APIError: 400 Client Error: Bad Request ("container cannot be disconnected from host network or connected to host network")
Noté la última línea:
docker.errors.APIError: 400 Error de cliente: solicitud incorrecta ("el contenedor no se puede desconectar de la red del host o conectar a la red del host")
¿Cómo puedo solucionar esto?
Puede comprobar los casos de la siguiente manera:
- Si el puerto docker tiene un mapeo.
- Compruebe el puerto del grupo de seguridad de AWS.
Si está ejecutando un mac, debería poder usar solo el nombre de host especial localmente al pasar el nombre de host para que el cliente quede en el contenedor que realiza la llamada. No se --docker-network
ninguna bandera --docker-network
necesaria
url = "http://docker.for.mac.localhost:3306"
O en las instalaciones más nuevas de la ventana acoplable https://docs.docker.com/docker-for-mac/release-notes/#docker-community-edition-17120-ce-mac49-2018-01-19
url = "http://docker.for.mac.host.internal:3306"
Si no está --docker-network
Mac y está --docker-network
enfoque de la --docker-network
cuando inicia su contenedor mysql, debería tener este aspecto.
docker run -d -v "$PWD":/var/lib/mysql -p 3306:3306 /
--network lambda-local /
--name mysql /
mysql
Entonces cuando se invoca localmente
sam local invoke --docker-network lambda-local
Tal vez te perdiste la primera parte? ¿Podría publicar cómo está iniciando contenedor mysql localmente?